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 ?