Visualizzazione dei risultati da 1 a 3 su 3
  1. #1
    Utente di HTML.it
    Registrato dal
    Aug 2004
    Messaggi
    361

    disabilitare select in base a scelta

    Ciao a tutti.

    Ho tre select in html: in base ad una delle opzioni della prima select (continente) devo disabilitare le altre due select.
    Il codice che sto usando ma che non funziona è il seguente:

    codice:
    <html>
    <head>
    <title></title>
    <script language="javascrypt" type="text/javascript">
    function handleSelect() {
         if (this.value == 'asia' || this.value == 'oceania') {
             document.getElementById('europa').disabled = true;         
             document.getElementById('america').disabled = true;                  
         } else {
             document.getElementById('europa').disabled = false;
             document.getElementById('america').disabled = false;  
            
         }
     }
    </script>
    </head>
    <body>
    
    <form name="prova" id="prova" method="post" action="pagina.php" onchange="handleSelect()">  
     			
    <select name="continente" id="continente">                         
    <option value="asia">asia</option>                         
    <option value="oceania">oceania</option>
    <option value="europa">europa</option>                       
    <option value="africa">africa</option>  
    <option value="america">america</option>
    </select>
    
    <select name="europa" id="europa">                         
    <option value="francia">francia</option>                         
    <option value="austria">austria</option>                         
    <option value="italia">italia</option>                         
    </select>   
                              
    <select name="america" id="america">
    <option value="newyork">newyork</option>
    <option value="texas">texas</option>
    <option value="florida">florida</option>           
    </select>   
       
    </form>
    
    </body>
    </html>
    In pratica, selezionando dalla prima select "asia" o "oceania" le altre due select devono disabilitarsi (cioè diventare grigie, non utilizzabili)
    Dove sbaglio? Thanks!

  2. #2
    Moderatore di CSS L'avatar di KillerWorm
    Registrato dal
    Apr 2004
    Messaggi
    4,238
    Ciao, ci sono due principali errori:

    1 - Quando chiami una funzione in quel modo, cioè specificando la chiamata direttamente nell'elemento HTML attraverso un attributo per la gestione di un evento (nel tuo caso, onchange="handleSelect()"), all'interno della funzione stessa non viene mantenuto il contesto di tale elemento, per cui la keyword this (che usi nella funzione) non fa riferimento a quell'oggetto ma, in questo caso, all'oggetto principale (window).

    Il contesto dell'oggetto potrebbe invece essere mantenuto se si definisce la gestione di tale evento direttamente nello script.
    Esempio:
    codice:
    document.getElementById('elemento').onchange = faiQualcosa;
    function faiQualcosa() {
        console.log(this); // l'elemento da cui è scaturito l'evento
    }
    In alternativa se vuoi utilizzare l'impostazione del tuo codice, dovrai passare specificatamente (con un parametro) il riferimento di this alla funzione, quindi sul tag HTML avrai una cosa del tipo onchange="handleSelect(this)" mentre la funzione dovrai definirla con un argomento che riceve appunto il riferimento di quell'elemento; una cosa tipo:

    codice:
    function handleSelect(me) {
        console.log(me); // l'elemento passato come parametro
    }
    .

    2 - Perché l'evento onchange lo hai definito per l'elemento <form>? Benché tale evento possa essere definito anche per l'intero form, non ha comunque senso farlo in questo particolare caso dal momento che ti interessa solo verificare quando il valore viene cambiato nella prima select; devresti quindi definirlo per quella select, non per il form.

    Fai qualche prova e vedi se con queste indicazioni riesci a risolvere.
    Fai sapere.
    Prima di postare considera che tra i link utili puoi trovare il 75% delle risposte alle tue domande; il 15% tra i post del forum; il 9% sul web.
    Ti resta l’1% ... usalo bene!

    Le cattive domande sono quelle che non meritano risposta, le buone domande sono quelle che non hanno risposta
    L'Itailano non e nu'opnioine. E' improntate uslaro correattemtne sul froum. Garize!

  3. #3
    Utente di HTML.it
    Registrato dal
    Aug 2004
    Messaggi
    361
    Quote Originariamente inviata da KillerWorm Visualizza il messaggio
    Ciao, ci sono due principali errori:

    1 - Quando chiami una funzione in quel modo, cioè specificando la chiamata direttamente nell'elemento HTML attraverso un attributo per la gestione di un evento (nel tuo caso, onchange="handleSelect()"), all'interno della funzione stessa non viene mantenuto il contesto di tale elemento, per cui la keyword this (che usi nella funzione) non fa riferimento a quell'oggetto ma, in questo caso, all'oggetto principale (window).

    Il contesto dell'oggetto potrebbe invece essere mantenuto se si definisce la gestione di tale evento direttamente nello script.
    Esempio:
    codice:
    document.getElementById('elemento').onchange = faiQualcosa;
    function faiQualcosa() {
        console.log(this); // l'elemento da cui è scaturito l'evento
    }
    In alternativa se vuoi utilizzare l'impostazione del tuo codice, dovrai passare specificatamente (con un parametro) il riferimento di this alla funzione, quindi sul tag HTML avrai una cosa del tipo onchange="handleSelect(this)" mentre la funzione dovrai definirla con un argomento che riceve appunto il riferimento di quell'elemento; una cosa tipo:

    codice:
    function handleSelect(me) {
        console.log(me); // l'elemento passato come parametro
    }
    .

    2 - Perché l'evento onchange lo hai definito per l'elemento <form>? Benché tale evento possa essere definito anche per l'intero form, non ha comunque senso farlo in questo particolare caso dal momento che ti interessa solo verificare quando il valore viene cambiato nella prima select; devresti quindi definirlo per quella select, non per il form.

    Fai qualche prova e vedi se con queste indicazioni riesci a risolvere.
    Fai sapere.
    grazie, vedo se cambiando come dici ottengo il risultato sperato.

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 © 2019 vBulletin Solutions, Inc. All rights reserved.