Dal momento che ci sono almeno 10000 comuni in Italia, ti conviene caricare le citta' dinamicamente piuttosto che rendere una lista enorme nella pagina (spero tu non abbia fatto questo
)
Con jQuery semplifichi parecchio.
Diciamo che hai una prima select con le regioni:
codice:
<select id="region">
<option value="Abruzzo">Abruzzo</option>
<option value="Basilicata">Basilicata</option>
<option value="Calabria">Calabria</option>
...
</select>
ed un'altra select inizialmente vuota per le citta',
codice:
<select id="city"/>
e vuoi che questa select venga 'riempita' con le citta' caricate attraverso una richiesta AJAX quando selezioni una regione.
Con jQuery puoi fare qualcosa del genere:
codice:
$(function() {
var regionSelect = $("#region");
regionSelect.change(function() {
$.getJSON('/cities.json?' + $.param({ region: this.val() }), function(cities) {
var html = '';
for (var i = 0; i< cities.length; i++) {
html += '<option value="' + cities[i] + '">' + cities[i] + '</option>';
}
regionSelect.html(html);
});
});
});
Spiegazione...
codice:
$(function() {
...
});
Questo fa si' che il DOM della pagina sia pronto quando il resto del codice viene eseguito; altrimenti puo' capitare che le selects non siano ancora presenti nella pagina mentre essa viene caricata, quando il resto del codice viene eseguito.
codice:
var regionSelect = $("#region");
Dal momento che il codice ha bisogno di interagire con la prima select piu' volte, conviene salvare ("cache") il riferimento alla prima select in una variable, cosi' che jQuery non debba trovare la prima select ogni volta ma sa gia' "dov'e'".
codice:
regionSelect.change(function() {
...
});
Qui aggiungi un "listener" all'evento "change" della prima select, cosi' ogni volta che cambi la regione selezionata, il codice definito per l'evento "change" verra' eseguito automaticamente.
codice:
$.getJSON('/cities.json?' + $.param({ region: this.val() }), function(data) {
...
});
Qui fai una richiesta AJAX per caricare le regioni per il paese selezionato (passato come querystring argument). Naturalmente invece di /cities.json qui userai lo URL del tuo script.
E' piu' semplice se lo script ritorna le citta' in formato JSON cosi' questi dati possono essere utilizzati direttamente con JavaScript.
codice:
var html = '';
for (var i = 0; i< cities.length; i++) {
html += '<option value="' + cities[i] + '">' + cities[i] + '</option>';
}
regionSelect.html(html);
Qui non fai altro che caricare le citta' per la regione selezionata, nella select per le citta'; ci sono vari modi per fare questo ma sostituire l'html contenuto dalla select direttamente ha prestazioni migliori.
Ho scritto il codice velocemente e non l'ho testato ma dovrebbe funzionare o comunque darti una idea.