Ci sono vari modi per risolvere.
Servirebbe una razionalizzazione delle variabili, con l'uso di matrici a due componenti (in cui la prima componente la usi come array associativa):
var province = new Array();
province['aosta'] = new Array("valle d'Aosta", "Aosta");
province['piemonte'] = new Array("Piemonte", "Torino", "Alessandria","Asti","Biella", ...);
....
Poi nel codice della prima select, puoi usare i value:
<option value="tutti">Tutte</option>
<option value="aosta">Valle d'Aosta</option>
<option value="piemonte">Piemonte</option>
...
In questo modo usi il value come puntatore alla matrice, e il text come testo da visualizzare.
Chiaramente in tal modo lo script diventa:
onchange="swapOptions(this.options[this.selectedIndex].value);"
Poi lo script diventa:
codice:
function swapOptions(index) {
var numbers_select = document.mioform.esempi;
setOptionText(numbers_select,index);
}
function setOptionText(the_select, the_array){
the_select.length=province[index].length-1;
for (c=0; c < the_array.length; c++) {
the_select.options[c].text = province[index][c+1];
}
}
Ho introdotto il nome della regione come primo elemento di ogni riga, pensando che potrebbe servire da qualche altra parte; se non serve puoi anche eliminarlo e togliere quei -1 e +1 inseriti nello script per correggere.
Non servono due funzioni: si puo` farne una sola:
codice:
function swapOptions(index) {
var the_select = document.mioform.esempi;
the_select.length = province[index].length-1;
for (c=0; c < the_array.length; c++) {
the_select.options[c].text = province[index][c+1];
}
}
Nota: la funzione eval() e` deprecata e bisognerebbe evitare di usarla.