Visualizzazione dei risultati da 1 a 9 su 9

Discussione: onchange e select

  1. #1
    Utente di HTML.it
    Registrato dal
    Feb 2006
    Messaggi
    17

    onchange e select

    Ciao, ho bisogno di un aiuto per il seguente problema:

    Ho un select a cui associo un evento onchange (nell'esempio che segue ho messo banalmente un alert). Se modifico via mouse l'opzione selezionata, l'onchange funziona perfettamente e mi mostra l'alert. Se invece modifico la selezione cambiando il selectedIndex del select (ma anche, ho provato, modificando il value) l'evento onchange sembra non attivarsi. Questo e' uno script d'esempio:

    <html>
    <head>
    </head>
    <body>
    <select id='sel_id' onchange='alert("valore cambiato");'>
    <option value='topolino'>topolino</option>
    <option value='pippo'>pippo</option>
    <option value='pluto'>pluto</option>
    </select>
    <input type='button' value='clicca qui' onclick='document.getElementById("sel_id").selecte dIndex=2;'>
    </body>
    </html>


    Di default l'opzione selezionata e' "topolino", cliccando sul pulsante diventa "pluto", ma l'onchange non si attiva. La domanda e' la seguente: esiste un modo qualunque per attivare un evento nel select (anche non onchange) quando modifico la selezione con:

    document.getElementById("sel_id").selectedIndex=2

    oppure

    document.getElementById("sel_id").value='pluto'

    Grazie mille in anticipo

    Davide

  2. #2
    Moderatore di JavaScript L'avatar di br1
    Registrato dal
    Jul 1999
    Messaggi
    19,998
    No, ma puoi sempre richiamare la funzione associata all'evento alla fine della tua modifica...

    ciao
    Il guaio per i poveri computers e' che sono gli uomini a comandarli.

    Attenzione ai titoli delle discussioni: (ri)leggete il regolamento
    Consultate la discussione in rilievo: script / discussioni utili
    Usate la funzione di Ricerca del Forum

  3. #3
    Dovresti associare al pulsante una funzione che controlla il selectedIndex, ma è molto complesso considerando che devi fare in modo di rilevare il "cambiamento" dell'opzione selezionata senza usare l'onchange. In effetti, per motivi di sicurezza, il gestore onchange funziona solo quando:

    1. Hai modificato un valore o un'opzione in un campo di un form.
    2. Hai tolto il focus all'elemento in cui hai fatto la modifica (con i campi select avviene in automatico).
    3. La modifica è stata fatta MANUALMENTE dall'utente.

    Proprio per motivi di sicurezza, onchange non funziona se è lo script ad effettuare una modifica ad un campo. In caso contrario, qualche script "maligno" potrebbe togliere all'utente il controllo dell'evento onchange e fare parecchie cose poco pulite...

  4. #4
    Utente di HTML.it
    Registrato dal
    Feb 2006
    Messaggi
    17
    Grazie seed_squall_it, temevo che la risposta fosse questa. Purtroppo quello che mi serve deve funzionare in automatico (nella realta' il cambio di value del select non avviene nemmeno dopo un click su un bottone, come nell'esempio che ho postato, ma sull'onload della pagina html), quindi mi spremero' le meningi per vedere se riesco a cavare fuori qualche idea.

    Naturalmente ogni aiuto e' molto benvenuto

    Grazie

    Davide

  5. #5
    Moderatore di JavaScript L'avatar di br1
    Registrato dal
    Jul 1999
    Messaggi
    19,998
    Originariamente inviato da davdtm
    Grazie seed_squall_it, temevo che la risposta fosse questa. Purtroppo quello che mi serve deve funzionare in automatico (nella realta' il cambio di value del select non avviene nemmeno dopo un click su un bottone, come nell'esempio che ho postato, ma sull'onload della pagina html), quindi mi spremero' le meningi per vedere se riesco a cavare fuori qualche idea.

    Naturalmente ogni aiuto e' molto benvenuto

    Grazie

    Davide
    I consigli vaghi li hai avuti... se desideri qualcosa di piu' preciso devi fornire maggiori informazioni: posta un link alla pagina o il suo sorgente completo.

    ciao
    Il guaio per i poveri computers e' che sono gli uomini a comandarli.

    Attenzione ai titoli delle discussioni: (ri)leggete il regolamento
    Consultate la discussione in rilievo: script / discussioni utili
    Usate la funzione di Ricerca del Forum

  6. #6
    Utente di HTML.it
    Registrato dal
    Feb 2006
    Messaggi
    17
    D'accordo, cerco di essere piu' preciso e vicino a quello che davvero mi serve, anche se qualitativamente non credo che cambi molto. Semplifico per forza lo script perche' quello che devo fare e' parecchio complesso e sono certo che pochissimi avrebbero voglia di stare a seguire tutto il discorso, diciamo che se trovo il modo di far funzionare lo script qui sotto saro' poi in grado di far andare anche tutto il resto che mi serve.


    <SCRIPT type='text/javascript'>
    function cambia_select()
    {
    document.getElementById("sel_id").value='pluto';
    }
    function fai_qualcosa()
    {
    alert('Funzione eseguita');
    }
    </SCRIPT>
    <html>
    <head>
    </head>
    <body onload='cambia_select()'>
    <select id='sel_id' onchange='fai_qualcosa();'>
    <option value='topolino'>topolino</option>
    <option value='pippo'>pippo</option>
    <option value='pluto'>pluto</option>
    </select>
    </body>
    </html>

    Come dicevo prima, la funzione "fai_qualcosa" non si attiva se non cliccando direttamente col mouse sul select.
    La funzione "fai_qualcosa" agisce in realta' su altre tendine, in cascata, ciascuna delle quali dovrebbe avere il suo onchange (o qualcosa che funziona quando gli si cambia il value senza usare il mouse direttamente). Per questo ho bisogno di un evento che sappia vedere la modifica (ma se onchange non funziona per motivi di sicurezza immagino che nessun'altro evento funzioni) oppure qualche brillante trucco per avere lo stesso effetto.

  7. #7
    Moderatore di JavaScript L'avatar di br1
    Registrato dal
    Jul 1999
    Messaggi
    19,998
    Mi pare di capire che la tua esigenza sia quella di impostare ad un valore predefinito le option di diverse select... immagino che la pagina sia generata lato server elaborando diversi parametri... allora puoi semplicemente stabilire lato server la posizione iniziale delle varie select... ti posto un esempio in ASP :
    codice:
    <select name="pippo" onchange="pluto()">
    <%
    set rs = Conn.execute(laTuaQuery)
    do until rs.eof
      response.write "  <option value=""" & rs("id") & """"
      if rs("id")=request("idPippo") then  response.write " selected"
      response.write ">" & rs("Descrizione") & "</option>" 
      rs.moveNext
    loop
    rs.close
    %>
    </select>
    Se vuoi continuare ad approfondire con la soluzione lato server ti sposto.

    ciao
    Il guaio per i poveri computers e' che sono gli uomini a comandarli.

    Attenzione ai titoli delle discussioni: (ri)leggete il regolamento
    Consultate la discussione in rilievo: script / discussioni utili
    Usate la funzione di Ricerca del Forum

  8. #8
    Utente di HTML.it
    Registrato dal
    Feb 2006
    Messaggi
    17
    Effettivamente i parametri vengono elaborati lato server (in php), l'idea e' che php interroga un db da cui estrae il valore di alcune tendine, che poi andrebbero precompilate in base ai quei valori.
    Purtroppo se fosse solo cosi' potrei far scrivere direttamente tutto da php in base ai risultati e tutto sarebbe semplicissimo. Il problema (grosso) e' che queste tendine sono concatenate fra loro, per semplificare al massimo immaginate che ci siano solo due tendine (A e B) in cui pero' le opzioni elencate da B dipendono dall'opzione scelta in A. Quello che voglio fare e':

    1) caricare da db in php i valori (a e b) da imporre successivamente nelle tendine A e B.

    2) le opzioni di A sono fisse, quindi fra queste posso selezionare direttamente l'opzione (a).

    3) In base al valore di (a) (e qui sta la complicazione) viene riempito di opzioni il select B

    4) Fra queste opzioni di B ci sara' anche (b), che viene selezionata utilizzando il valore precedentemente caricato

    5) Via di seguito dato che ci saranno anche le tendine C, D, ...

    Ho gia' tutta una procedura che mi permette di riempire B in funzione della scelta di A ed e' basata sull'onchange perche' finora la scelta era manuale. Volevo utilizzare la stessa procedura automatica, anche nel caso di selezione non manuale (cioe' tramite mouse) ma imponendo il value di A, e questo per poter salvare su db delle selezioni da poter recuperare in seguito.

    Se l'onchange funzionasse anche in questo caso, tutto sarebbe molto figo perche' potrei riutilizzare gran parte del codice che ho scritto e tutto funzionerebbe in automatico (dovrei solo sostituire di volta in volta l'intervento manuale con la selezione "via codice", ma tutti i concatenamenti fra le tendine (che sono virtualmente infinite) sarebbero gestiti automaticamente).

    per queste ragioni credo che il forum giusto sia questo e non lato server

    Spero che qualcuno abbia qualche idea... pendo dalle vostre tastiere...

    Davide

  9. #9
    Moderatore di JavaScript L'avatar di br1
    Registrato dal
    Jul 1999
    Messaggi
    19,998
    Ho perfettamente presente quello che cerchi di ottenere (vedi questo esempio di qualche anno fa ) ... e ti posso assicurare che la gran parte del lavoro verra' svolto dal server.

    Se poi lato client utilizzerai ajax (cerca) o un semplice iframe come nell'esempio dipende solo da una scelta personale.

    ciao
    Il guaio per i poveri computers e' che sono gli uomini a comandarli.

    Attenzione ai titoli delle discussioni: (ri)leggete il regolamento
    Consultate la discussione in rilievo: script / discussioni utili
    Usate la funzione di Ricerca del Forum

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.