recuperare valori da più select legate da chiamata Ajax con jQuery
- Questo topic ha 6 risposte, 2 partecipanti ed è stato aggiornato l'ultima volta 9 anni, 8 mesi fa da
jqueryitalia.
- AutorePost
- 30 Dicembre 2013 alle 10:06 #5667
markus
PartecipanteCiao e auguri a tutti,
Avrei bisogno di un aiuto perché in un mio form ho creato, grazie ad un tutorial, tre select a cascata – le classiche regioni, province, comuni – dove un utente sceglie una regione e poi tramite una chiamata Ajax eseguita con jQuery, viene riempita la seconda select con le province corrispondenti, e poi la terza con i comuni ugualmente corrispondenti.
Uso ovviamente PHP con le tre tabelle su MySQL e appunto jQuery. Tutto funziona perfettamente, solo che vorrei riuscire a fare una cosa ulteriore, ovvero al submit del modulo recuperare i tre eventuali valori inseriti nelle select, con jQuery in questo caso. Ho scelto di NON renderli obbligatori.
Tutti i campi sono validati, ripeto tramite PHP, ma qui per i 3 menù a cascata vorrei usare jQuery, in modo da ripresenatre al mio utente il form con le sue scelte effettuate, per evitargli la scocciatura di dover nuovamente scegliere dai 3 menù.
Devo dire a jQuery di creare tre variabili con i valori inseriti dall’utente e di mostrarli nelle option. Ho provato ma nulla..
Ecco il codice che uso:
$(document).ready(function(){ var scegli = '<option value="0">Scegli...</option>'; var attendere = '<option value="0">Attendere...</option>'; $("select#province").html(scegli); $("select#province").attr("disabled", "disabled"); $("select#comuni").html(scegli); $("select#comuni").attr("disabled", "disabled"); $("select#regioni").change(function(){ var regione = $("select#regioni option:selected").attr('value'); $("select#province").html(attendere); $("select#province").attr("disabled", "disabled"); $("select#comuni").html(scegli); $("select#comuni").attr("disabled", "disabled"); $.post("select.php", {id_reg:regione}, function(data){ $("select#province").removeAttr("disabled"); $("select#province").html(data); }); }); $("select#province").change(function(){ $("select#comuni").attr("disabled", "disabled"); $("select#comuni").html(attendere); var provincia = $("select#province option:selected").attr('value'); $.post("select.php", {id_pro:provincia}, function(data){ $("select#comuni").removeAttr("disabled"); $("select#comuni").html(data); }); });
Fino a qui tutto ok, poi non so come ottenere quanto sopra. Pensavo di proseguire con una cosa del genere:
$("#form_registrazione").submit(function(){ var reg = $("select#regioni option:selected").attr('value'); var prov = $("select#province option:selected").attr('value'); var com = $("select#comuni option:selected").attr('value');
Pensavo cioè di creare al submit del form tre variabili, per poi dire che se queste sono maggiori di zero (e perciò lo user le ha compilate) di inserire i valori nelle select ed inviare appunto il form, altrimenti tutto torna come prima.
pensavo a una cosa del genere:
if ( parseInt(reg) > 0 && parseInt(prov) > 0 && parseInt(com) > 0 ) {
ma non so come proseguire.
Grazie e ciao.
30 Dicembre 2013 alle 10:12 #5668markus
PartecipanteAggiungo solo il link alla mia pagina web; se usate Firebug lo script l’ho chiamato ‘jquery.Regioni.js’
http://newbielinux.altervista.org/registrazione.php
Grazie in anticipo.
Bye.
3 Gennaio 2014 alle 12:55 #5672jqueryitalia
AmministratoreSalve markus.
Anche per te la raccomandazione di leggere attentamente le REGOLE DEL FORUM, prima di inserire codice nel post 😉
La tua richiesta è abbastanza semplice da eseguire, in quanto per recuperare i valori delle 3 select è sufficiente scrivere:
var reg = $("#regioni").val(); var prov = $("#province").val(); var com = $("#comuni").val();
e non il codice che hai scritto tu 😉
Buon lavoro!
3 Gennaio 2014 alle 18:28 #5674markus
PartecipanteSalve,
Chiedo scusa per l’inserimento del codice in modo errato, ma ogni forum è talmente diverso ….
Ok, ma avevo anch’io pensato ad una cosa simile, ma non funziona, poiché se un utente compila il mio form e non inserisce un campo che ho reso obbligatorio e sceglie di inserire la sua regione, provincia, comune ( che detto per inciso ho reso NON obbligatori) e poi invia il modulo, ecco che gli ripresento il modulo stesso con tutti i suoi valori inseriti prima, gli faccio apparire anche una scritta sopra il form con l’errore commesso e gli evidenzio anche il campo dove ha sbagliato. Faccio tutto con PHP, per avere la massima sicurezza, ma qui non con jQuery NON riesco a recuperare questi 3 valori. Devo inserire per forza un struttura condizionale – if else, che dica a js che al submit del form se sono state fatte delle scelte nelle 3 drop-down menus deve essere recuperato il valore scelto.
E’ un pò complesso, e non so come fare.
Ciao.
3 Gennaio 2014 alle 21:57 #5675jqueryitalia
AmministratoreUhmmmm… ma se fai la verifica con php, perchè usare jQuery???
Sulla verifica php controlla se i campi regione, provincia e comune sono stati compilati (con i relativi valori POST) ed in caso di errore ritornati i valori.
Alrimenti esegui una doppia verifica (prima javascript con jQuery e poi php) eseguendo una chiamata ajax 😉4 Gennaio 2014 alle 13:33 #5676markus
PartecipanteCiao,
Infatti ho provato nella classe PHP che uso per queste tre select, a recuperare i valori appunto da PHP, ma poi il problema si presenta con la chiamata Ajax che viene fatta con jQuery per la select con le province e poi i comuni. Anche se riesco a recuperare in modo esatto la regione scelta dall’utente e a ripresentarla ecco che poi le altre due select sotto restano bloccate a Scegli. Nel senso che non si riesce più a mostrare il menù delle province e dei comuni!.
Infatti lo script jquery.Regioni.js effettua la chiamata Ajax con un POST al file select.php che contiene solo un’istanza della classe in questione , la select.class.php, e accede poi semplicemente ai due metodi qui presenti, che ho chiamato ShowProvince() e ShowComuni(). Per capirci:
Ecco il suo contenuto:
<?php include_once ‘select.class.php’; $opt = new SelectList(); if ( isset($_POST['id_reg']) ) { echo $opt->ShowProvince(); die; } if ( isset($_POST['id_pro']) ) { echo $opt->ShowComuni(); die; } ?>
Ecco invece come in select.class.php recupero si il valore della regione, ma poi le altre due select si bloccano:
public function ShowRegioni() { try { include ‘config_db.php’; $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); $stmt = $pdo->prepare(“SELECT * FROM regioni”); $stmt->execute(); $regioni = ‘<option value=”0″>scegli…</option>’; while ( $row = $stmt->fetch(PDO::FETCH_ASSOC) ) { $regioni .= ‘<option value=”‘ . $row['id_reg'] . ‘”‘ . ( $_POST['regioni'] == $row['id_reg'] ? ” selected=’selected’” : “” ) . ‘>’ . $row['nome_regione'] . ‘</option>’; } return $regioni; } catch (PDOException $e) { echo “Error!: ” . $e->getMessage() . “<br />”; die; } } public function ShowProvince() { try { include ‘config_db.php’; $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); $stmt = $pdo->prepare(“SELECT * FROM province WHERE id_reg =” . $_POST['id_reg']); $stmt->execute(); $province = ‘<option value=”0″>scegli…</option>’; while ( $row = $stmt->fetch(PDO::FETCH_ASSOC) ) { $province .= ‘<option value=”‘ . $row['id_pro'] . ‘”‘ . ( $_POST['province'] == $row['id_pro'] ? ” selected=’selected’” : “” ) . ‘>’ . $row['nome_provincia'] . ‘</ option>’; } return $province; } catch (PDOException $e) { echo “Error!: ” . $e->getMessage() . “<br />”; die; } } public function ShowComuni() { try { include ‘config_db.php’; $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); $stmt = $pdo->prepare(“SELECT * FROM comuni WHERE id_pro =” . $_POST['id_pro']); $stmt->execute(); $comuni = ‘<option value=”0″>scegli…</option>’; while ( $row = $stmt->fetch(PDO::FETCH_ASSOC) ) { $comuni .= ‘<option value=”‘ . $row['id_com'] . ‘”‘ . ( $_POST['comuni'] == $row['id_com'] ? ” selected=’selected’” : “” ) . ‘>’ . $row['comune'] . ‘</option>’; } return $comuni; } catch (PDOException $e) { echo “Error!: ” . $e->getMessage() . “<br />”; die; } }
Insomma non va. Tutto perché non riesco a fare questi recuperi da jQuery!
Ciao.
10 Gennaio 2014 alle 15:10 #5685jqueryitalia
AmministratoreVerifica che non vi siano errori nel file php che chiami in ajax 😉
- AutorePost
- Devi essere connesso per rispondere a questo topic.