Combos dependientes con php y jquery
Tengo un combo dinámico con php del cual obtengo el id y el nombre del país seleccionado el cual me devuelve los datos mediante el formato Json los valores que se ponen en la segunda lista dependiendo del valor seleccionado en la primera.
Ahora pondremos dos combos, uno será el combo del país y la otra será el combo de la ciudad cual se llenara nuevamente en el evento onchange de la lista del país.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 | <? //Esta es una clase q implemente para la coneccion a la bd en el cual utilize la libreria adodb include_once("database.php"); $coneccion=database::conectar(); ?> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <script type="text/javascript" src="../js/jquery.min.js"></script> <script type="text/javascript" src="../js/combosDependientes.js" ></script> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>Combos Dependientes</title> </head> <body> <label>Pais :</label> <? $querypais="select id_pais,pais_nom from pais order by pais_nom"; $rspais=database::Reader($querypais,$coneccion); echo "<select name="pais">"; echo "<option value="0">--Seleccione un pais--</option>"; foreach (database::result($rspais) as $rowPais){ echo "<option value='".$rowPais['id_pais']."'>".$rowPais['pais_nom']."</option>"; } echo "</select>"; ?> <p> <label>Ciudad :</label> <select name="ciudad"><option value="0">--Seleccione una ciudad--</option></select> </p> </body> </html> |
Luego creamos el fichero ciudad.php que se va encargar de rellenar la lista dependiente enviando los datos por el formato Json.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 | <?php include_once("database.php"); $coneccion=database::conectar(); $queryciudad="select id_ciudad,ciudad_nom from ciudad where id_pais='".$_GET['idpais']."' order by ciudad_nom"; $rsciudad=database::Reader($queryciudad,$coneccion);//ejecutamos la consulta $json = '['; $json_names = array(); //verificamos si existe algun registro if(database::numfila($rsciudad)>0){ //recorremos los registros retornados foreach (database::result($rsciudad) as $rowciudad) { $ciudad=utf8_encode($rowciudad[ciudad_nom]); $json_names[] = "{optionValue: $rowciudad[id_ciudad], optionDisplay: '$ciudad' }"; } }else{ $json_names[] = "{optionValue: '', optionDisplay: 'Seleccione'}"; } $json .=implode(',', $json_names);//separamos el array por comas $json .= ']'; echo $json; //devolvemos en formato json la data unset($json,$json_names);//destruimos las variables creadas ?> |
Por ultimo lanzamos una petición a nuestro fichero ciudad.php con los parámetros id_pais, cargamos con los datos que necesitamos para que al detectar un cambio en el elemento del select del pais este envié la petición indicando que quiero recibir los datos en formato json para luego recorrerlo y pintar las option que necesito para rellenar el select de la ciudad
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | $(function(){ $("select[@name=pais]").change(function(){ var idpais=$(this).val();//obtenemos el valor del pais seleccionado $.getJSON('ciudad.php?idpais='+idpais,function(json){//cargamos la lista dependiente var options = ""; for(var i=0;i<json.length;i++){ options+='<option value='+json[i].optionValue+'>'+json[i].optionDisplay+'</option>'; } $('select[@name=ciudad] option').remove(); $('select[@name=ciudad]').append(options); }) }) }) |



