Problem with function for popular cities according to chosen state, change() function

Asked

Viewed 50 times

1

I have the following function:

$(function(){
    $("#estadoPaciente").change(function() {
        var id = $(this).val();
        $.ajax({
            type: "POST",
            url: "../controller/ajax.selectCidades.php?id="+id,
            dataType: "text",
            success: function(res) {
                $("#cidadePaciente").append(res);
                $("#cidadePaciente").selectpicker('refresh');
            }
        });
    });
});

In PHP:

<?php
include_once 'controller.seguranca.php';
include_once 'controller.cidade.php';

$id_estado = $_GET['id'];

$cidade = new CidadeController();
$retornoCidade = $cidade->selectCidadePorEstado($id_estado);
if(count($retornoCidade) > 0)
{
    foreach ($retornoCidade as $dados => $value) 
    {       
        echo '<option value='.$retornoCidade[$dados]->id_GRcidade.'>'.utf8_encode($retornoCidade[$dados]->nome_GRcidade).'</option>';
    }
}
?>

This code is working, the problem is the following:

If the user chooses, for example, the state of Bahia, the cities of the state of Bahia will appear in the <select id="cidadePaciente>, but if he moves to the state of São Paulo, <select id="cidadePaciente> continues showing the cities of the state of Bahia, even the user changing the <select id="estadoPaciente> for the state of São Paulo. (The chosen states are just examples, the problem happens to any chosen state).

  • Change $("#cidadePaciente").append(res); for $("#cidadePaciente").html(res);

1 answer

2


You should change the line of your javascript:

$("#cidadePaciente").append(res);

To:

$("#cidadePaciente").html(res);

You should also make the following change in your PHP, create an ex variable: $html = "" below the variable $id_estado, then change the line:

echo '<option value='.$retornoCidade[$dados]->id_GRcidade.'>'.utf8_encode($retornoCidade[$dados]->nome_GRcidade).'</option>';

To:

$html .= '<option value='.$retornoCidade[$dados]->id_GRcidade.'>'.utf8_encode($retornoCidade[$dados]->nome_GRcidade).'</option>';

And outside the foreach and still within the if add:

echo $html;
  • It worked perfectly. Thank you!

Browser other questions tagged

You are not signed in. Login or sign up in order to post.