Select concatenata che non funziona la seconda volta

  • Creatore Discussione Creatore Discussione _Rosy_
  • Data di inizio Data di inizio

_Rosy_

Nuovo Utente
29 Nov 2020
2
0
1
Ciao a tutti, premetto che sono una neofita in php, jquery, javascript, tutto!
Sto creando una serie di select concatenate Regione ->provincia->comune e così via. Sono al livello provincia->comune e la select (che si popola da un DB) funziona: quando seleziono una provincia la seconda si popola coi suoi comuni. Il problema sorge quando modifico la provincia (dopo aver già effettuato una prima chiamata): il console.log mi mostra che il viene chiamato un nuovo json corretto (coi nuovi comuni della nuova provincia selezionata) ma non riesco ad aggiornare la lista che mi viene stampata a schermo (che resta ferma alla prima selezione provinciale che ho fatto). So che l'argomento è stato trattato molto ma non sono riuscita a trovare una discussione con questo specifico problema, mi scuso se quindi il thread è ripetitivo.
Grazie a tutti
Posto il codice:
index.php
Codice:
<!DOCTYPE html>
<html>

<select id="scegliprovincia"></select>
<select id="sceglicomune"></select>


<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.5.1/jquery.min.js"></script>
<script>
$(document).ready(function(){

    $.ajax({
    type:"POST",
    url:"estraiprovincia.php",
    //data:{"nuovo_indirizzo":miocomune},
    success: function(response){
    console.log(response);
    riempiselect(response,"scegliprovincia","dsxdpt");
    
            }
    });
    $("#scegliprovincia").change(function() {
    $.ajax({
    type:"POST",
    url:"estraicomune.php",
    data:{ "select" : $('#scegliprovincia').val()},
    success: function(response){
        riempiselect(response,"sceglicomune","dsxcnl");
    
            }
        });       
    });

});
function riempiselect(nome_json,nome_select, info) {
    var jparsed=JSON.parse(nome_json);
    $("#"+nome_select).append("<option>"+"Effettua una scelta"+"</option>");
    for (chiave in jparsed) {
    $("#"+nome_select).append("<option>"+jparsed[chiave][info]+"</option>");
    }
}

</script>
</html>

estraicomune.php (estraiprovincia non lo posto ma è pressocchè identico)
PHP:
<?php


include("function/connessione.php");
$provincia= $_POST['select'];

$i=$con->query("select distinct dsxcnl from molise_prova where dsxdpt='$provincia' order by dsxcnl");
$row=$i->fetchAll(PDO::FETCH_ASSOC);

echo json_encode($row);


?>
 
Ciao, da quel che vedo il metodo "append" di jQuery va ad aggiungere gli elementi in fondo al contenitore. In questo caso le nuove <option>, dopo ogni selezione del primo select, vanno ad aggiungersi in fondo a quelle già presenti dentro il secondo select. Prova a verificare se è così.

Il problema sta proprio in quell'append.
Eventualmente prova a sostituire questa riga che sta dentro la funzione riempiselect():
Codice:
$("#"+nome_select).append("<option>"+"Effettua una scelta"+"</option>");
con questa:
Codice:
$("#"+nome_select).html("<option>"+"Effettua una scelta"+"</option>");
In sostanza, anziché il metodo "append" ci sarà il metodo "html". Questo fa in modo di sostituire l'intero contenuto (esistente) col nuovo html specificato. Puoi quindi capire che applicando tale metodo, il primo <option> (che sostanzialmente viene riscritto uguale dopo ogni selezione) va a rimpiazzare tutto ciò che era già presente. Chiaramente a seguire verrà comunque applicato un ciclo di append con le nuove <option> relative alla risposta del server appena ricevuta.

Prova e fai sapere.
 

Discussioni simili