- Home
- Categorie
- Coding e Sistemistica
- Javascript & Framework
- jquery e select dinamiche per provincia, comune e cap
-
No Mirko,
ogni elemento ha il suo id e il suo name.<tr> <td align="left" valign="middle" > <label for="provincia">Provincia:</label> <select id="provincia" name="provincia"> <option>Seleziona la provincia</option> <?php while ($row = mysql_fetch_assoc($provs)) { ?> <option value="<?php echo $row["id"] ?>"><?php echo $row["provincia"]?></option> <?php } mysql_free_result($provs); ?> </select> </td> </tr> <tr> <td align="left" valign="middle" > <label for="citta">Città:</label> <select id="citta" name="citta"> <option value="-1">Seleziona il comune</option> </select> </td> </tr> <tr> <td align="left" valign="middle" > <label for="cap">Cap:</label> <input id="cap" type="text" name="cap"/> </td> </tr>
-
Ciao,
non mi viene in mente niente, potresti tracciare cosa succede assegnando vari alert agli eventi onfocus() e lostfocus(),
per capire quando avviene il cambiamento (prima, dopo o durante la chiamata ajax).Hai Firefox?
Con FF e FireBug puoi debuggare comodamente il tuo codice JavaScript tracciando i vari step anche sulla console.Ciao
-
Si, uso già firebug ma solo per controllare le chiamate asincrone e le risposte del server.
Sinceramente non so co me si fa a debuggare il JavascriptGrazie
Nicola
-
Se proprio non ne vieni a capo,
ti consiglio di informarti meglio sulle potenzialità e sull'utilizzo di firebug.Comunque, sempre per FF,
ci sono altre extension per il debug di codice Javascript.Ciao
-
Ciao nicogaglia,
mi è venuta in mente una soluzione.Purtroppo non so dirti perchè si verifica quel problema, ma per ovviare potresti salvarti lo stato dei vari componenti che hai sulla pagina prima di eseguire la chiamata e riutilizzarli per ri-settare li stessi componenti successivamente alla chiamata ajax.
Ciao
-
Ci ho pensato....
ci provo e ti faccio sapere.Grazie
Nicola
-
Ehm...
scusa la mia ignoranza ma... a livello di codice tu come faresti?
Mi fai un esempiO?:?
-
Ciao,
io prevederei delle variabili a livello di pagina e le valorizzerei prima di ogni chiamata ajax.ES:
[PHP]
var provincia = null;
var comune = null;
var cap = null;$(document).ready(
.................
)
[/PHP]Prima di richiedere i comuni valorizzi la variabile provincia con la provincia scelta e prima di richiedere il cap salvi il valore scelto del comune nella variabile comune.
Spero di essere stato chiaro.
Ciao
-
Rieccomi alla carica...
purtroppo non sono riuscito a fare come mi hai indicato, Mirko.
Vado per ordine....- Seleziono la provincia dalla prima combo.
Mi fa una chiamata alla checkcomune.php e gli passa come parametri:
comune=-1;
provincia=72; ad esempio (value della provincia selezionata)
La check comune mi restituisce giustamente l'elenco di tutti i comuni senza nessuno già selezionato (giustamente perchè -1 non corrisponde a nessuno dei values dei comuni. - Seleziono il comune dalla seconda combo:
Mi richiama alla checkcap.php passandogli come parametro il codice del comune:
comune=72012; ad esempio
Correttamente mi restituisce il cap corrispondente al comune selezionato, ma la combo dei comuni mi mostra sempre il primo comune della lista.
Dovrei quindi fare in modo di ripassare il parametro codice comune corretto alla checkcomune... ma come lo intercetto, al caricamento della pagina?
Grazie
Nicola
- Seleziono la provincia dalla prima combo.
-
Ciao,
cerco di portarti parte dell'esempio:[php]
//variabili globali
var prov_glob= null;
var com_glob= null;
var cap_glob= null;$("#provincia").change(function() {
//SALVO IL VALORE SCELTO PER LA PROVINCIA
prov_glob = $("#provincia").val();var prov = $("#provincia").val(); var comune = $("#citta").val(); $.ajax({ type: "POST", url: "checkcomune.php", data: "provincia="+ prov + "&comune="+ comune, success: function(resp){ $("#citta").ajaxComplete(function(event, request, settings){ $(this).html(resp); }); } });
}); //fine provincia.change
[/php]
E poi la stessa cosa quando si scatena l'evento onchange sui comuni.
Finita la function che gestisce la scelta dei comuni riassegni alla select dei comuni il valore salvato in com_glob.Ciao
-
Niente da fare.
[...]Grazie
Nicola
-
Io l'ho fatto usando il plugin jquery: linkedSelect
-
Ciao,
ho provato, i risultati non sono proprio come mi aspettavo, è di una lentezza impressionante (forse per la grossa mole di dati da trattare) inoltre mi da un popup con un errore js.Grazie
Nicola
-
A me funziona benissimo, dipende come l'hai applicato, io ho tre select, la prima delle regioni è normale, selezionata la regione presento le provincie e poi i comuni:
$(document).ready(function(){ $('#provincia').linkedSelect('ajaxsave.php?ps=comune','#comune',{firstOption: 'Selezionare il comune', loadingText: 'Attendere...'}); $('#regione').linkedSelect('ajaxsave.php?ps=provincia','#provincia',{firstOption: 'Selezionare la provincia', loadingText: 'Attendere...'}); });
ajaxsave.php mi torna i dati necessari.
-
Ah c'è proprio il metodo linkedselect...
Io invece ho cercato quella parola su google e ho trovato altro... che ho provato... con tutte le conseguenze che ti ho descritto.Ti sarei grato se mi posteresti il link alla libreria.
Grazie mille
Nicola
-
Ho provato anche a cercarla tra i plugin sul sito ufficiale ma non me lo ha trovato
-
Effettivamente il sito non c'è più, ti posto il codice di jquery.linkedselect.js:
(function($){ $.fn.linkedSelect = function(url,destination,params) { var params = $.extend({ firstOption : 'Please Select', loadingText : 'Loading...' },params); var $dest = $(destination); return this.each(function(){ $(this).bind('change', function() { var $$ = $(this); $dest.attr('disabled','false') .append('<option value="">' +params.loadingText+ '</option>') .ajaxStart(function(){ $$.show(); }); $.getJSON(url,{str: $$.val() }, function(j){ if (j.length > 0) { var options = '<option value="">' +params.firstOption+ '</option>'; for (var i = 0; i < j.length; i++) { options += '<option value="' + j*.optionValue + '">' + j*.optionDisplay + '</option>'; } } $dest.removeAttr('disabled') .html(options) .find('option:first') .attr('selected', 'selected'); }); }); }); }; })(jQuery);
-
Grazie mille.
Ora provo... al max ti chiederò delle dritte sull'utilizzo.Dovrò modificare il js leggermente perchè in realtà io ho due combo e una textbox il cui valore è univocamente definito dalla scelta della seconda combo.
Ti farò sapere.
Grazie
Nicola
-
Ciao,
finalmente ho trovato 5 minuti per provare questo codice.Sorge la prima domanda: in che modo la funzione (nel tuo caso ajaxsave.php) ti restituisce i valori?
Grazie
Nicola
-
Ciao ho risolto,
ho semplicemente modificato il js che mi hai postato adattandolo all'oggetto JSON che il mio script emette.