Visualizzazione dei risultati da 1 a 4 su 4

Discussione: Select a tre cascate

  1. #1
    Utente di HTML.it L'avatar di Demiste
    Registrato dal
    May 2001
    Messaggi
    188

    Select a tre cascate

    Ciao a tutti, dunque guardando la pillola di Var
    codice:
    funzione 2: tag select dinamico (contenuto di un tag select relativo alla selezione fatta in un altro tag select) 
    
    descrizione: avendo due tag select, questa funzione associa il contenuto del secondo tag select alla selezione effettuata nel primo. 
    
    prima di tutto andiamo a creare un array di oggetti, in pratica l'insieme degli elementi che potrebbero comparire nel menu a contenuto dinamico: 
    
    
    code:--------------------------------------------------------------------------------
    var elementi = new Array(
    {text:"Repubblica", value:"http://www.repubblica.it", indicatore:"it"},
    {text:"HTML.it", value:"http://www.html.it", indicatore:"it"},
    {text:"Rai", value:"http://www.rai.it", indicatore:"it"},
    {text:"CNN", value:"http://www.cnn.com", indicatore:"en"},
    {text:"Nasa", value:"http://www.nasa.gov", indicatore:"en"}
    );
    --------------------------------------------------------------------------------
    
    
    come vedete, ogni elementi dell'array è una terna che presenta, rispettivamente, il text dell'elemento, il relativo value e un indicatore, identico quest'ultimo al value di un elemento nel primo menu. 
    
    ecco qui la funzione che si occupa del popolamento del secondo menu: 
    
    
    code:--------------------------------------------------------------------------------
    function travasa(dove, valore) {
     var k=0;
     for (j=0; j<elementi.length; j++)
      if (elementi[j].indicatore==valore) {
       dove.options[k]=new Option(elementi[j].text, elementi[j].value);
       k++
      }
     dove.options.length=k;  
    }
    --------------------------------------------------------------------------------
    
    
    in pratica la funzione scandisce tutto l'array elementi e, per ogni elemento, verifica che ci sia una corrispondenza fra l'indicatore e il parametro "valore" della funzione, che rappresenta il value dell'elemento selezionato nel primo menu. 
    da notare che un elemento del menu viene creato con questa sintassi: 
    
    
    code:--------------------------------------------------------------------------------
    menu.options[i]=new Option("HTML.it", "http://www.html.it");
    --------------------------------------------------------------------------------
    
    
    alla fine della funzione, viene impostata anche la lunghezza dell'array option associato al secondo menu: tale lunghezza (ossia il numero di elementi del menu) non è altro che il valore del contatore k. 
    
    la chiamata della funzione è la seguente: 
    
    
    code:--------------------------------------------------------------------------------
    <select name="s1" id="s1" onChange="travasa(this.form.s2, this.options[this.selectedIndex].value);">
     <option value="it">Siti italiani</option>
     <option value="en">Siti inglesi</option>
    </select>
    --------------------------------------------------------------------------------
    
    
    il tutto è dunque: 
    
    
    code:--------------------------------------------------------------------------------
    <script language="JavaScript">
    <!--
    var elementi = new Array(
    {text:"Repubblica", value:"http://www.repubblica.it", indicatore:"it"},
    {text:"HTML.it", value:"http://www.html.it", indicatore:"it"},
    {text:"Rai", value:"http://www.rai.it", indicatore:"it"},
    {text:"CNN", value:"http://www.cnn.com", indicatore:"en"},
    {text:"Nasa", value:"http://www.nasa.gov", indicatore:"en"}
    );
    
    function travasa(dove, valore) {
     var k=0;
     for (j=0; j<elementi.length; j++)
      if (elementi[j].indicatore==valore) {
       dove.options[k]=new Option(elementi[j].text, elementi[j].value);
       k++
      }
     dove.options.length=k;  
    }
    //-->
    </script>
    Questa mi permette di fare due select dipendenti l'una dall'altra, ma è possibile farne tre dipendenti ?
    Ci sto provando ma non mi funziona, mi è venuto addirittura il dubbioche non si possa fare !!!!
    E'dura la vita in pianura

  2. #2
    Utente di HTML.it L'avatar di Demiste
    Registrato dal
    May 2001
    Messaggi
    188
    Nessuno mi sa aiutare ????
    E'dura la vita in pianura

  3. #3
    Utente di HTML.it L'avatar di Demiste
    Registrato dal
    May 2001
    Messaggi
    188
    Ho visto diversi post al riguardo ma tutti trattano solo il caso di due select, vuol dire quindi che con tre non si può fare?
    E'dura la vita in pianura

  4. #4
    Utente di HTML.it
    Registrato dal
    Sep 2001
    Messaggi
    21,188
    Si puo` fare, ma la complessita` aumenta parecchio.

    Per due <select> hai bisogno di vettori a tre dimensioni (o equivalentemente tanti vettori a 2 dimensioni quante le scelte della prima select), per tre select occorre fare una cosa ricorsiva come quello a due select, per ogni selezione della prim aselect.

    .... forse ti conviene cercare qualcosa con chiamata al server ....
    (con le popup oppure con il ricaricamento della pagina)
    Nuova politica di maggiore severita` sui titoli delle discussioni: (ri)leggete il regolamento
    No domande tecniche in messaggi privati

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.