Ver Mensaje Individual
  #2 (permalink)  
Antiguo 12/04/2014, 13:43
Avatar de Alexis88
Alexis88
Philosopher
 
Fecha de Ingreso: noviembre-2011
Ubicación: Tacna, Perú
Mensajes: 5.552
Antigüedad: 12 años, 5 meses
Puntos: 977
Respuesta: Lista Desplegable con valores condicionados en un select inicial

No es tan difícil como crees. Cuando elijas una opción del primer combo, se produce el evento change, el cual puedes controlarlo con el método change de jQuery. Luego, cada vez que elijas un valor distinto en el combo, utiliza el método ajax de jQuery para envíar una petición asíncrona (Ajax) hacia un archivo que en el lado del servidor buscará las marcas que correspondan con el elemento seleccionado. En dicho archivo, además de buscar las marcas, cargarás a un segundo combo con dichos datos, el cual representará a la respuesta del servidor en la petición asíncrona. Luego, en el primer archivo, solamente te quedaría dicha respuesta al contenido de una capa que debes crear previamente y colocarla ya sea abajo o al costado del primer combo.

Primer archivo
Código HTML:
Ver original
  1. <select id = "vehiculos" name = "vehiculos">
  2.     <option value = "Ninguno">Seleccione un valor</option>
  3.     <option value = "Autos">Autos</option>
  4.     <option value = "Bicicletas">Bicicletas</option>
  5.     <option value = "Barcos">Barcos</option>
  6.     <option value = "Motocicletas">Motocicletas</option>
  7. <div id = "respuesta"></div>

Código Javascript:
Ver original
  1. $("#vehiculos").change(function(){
  2.     if ($(this).val() != "Ninguno"){
  3.         $.ajax({
  4.             url: "segundo_archivo.php",
  5.             type: "GET",
  6.             data: {
  7.                 opcion: $(this).val()
  8.             }
  9.         }).done(function(response){
  10.             $("#respuesta").html(response);
  11.         }).fail(function(jqXHR, textStatus){
  12.             $("#respuesta").html("Ha ocurrido un error: " + textStatus);
  13.         });
  14.     }
  15. });

Segundo archivo
Código PHP:
Ver original
  1. <?php
  2. $opcion = mysqli_real_escape_string(strip_tags($_GET["opcion"]));
  3. $query = mysqli_query($conexion, "SELECT * FROM marcas WHERE vehiculo = $opcion");
  4. if (mysqli_num_rows($query)){
  5. ?>
  6.     <select id = "marcas" name = "marcas">
  7. <?php
  8.     while ($row = mysqli_fetch_array($query)){
  9. ?>
  10.         <option value = <?=$row["id_marca"]?> <?=$row["marca"]?> </option>
  11. <?php        
  12.     }
  13.     mysqli_free_result($query);
  14. ?>
  15.     </select>
  16. <?php
  17. }
  18. ?>

También es posible hacerlo con código JavaScript nativo.

Código Javascript:
Ver original
  1. var vehiculos = document.getElementById("vehiculos");
  2.  
  3. vehiculos.addEventListener("change", function(){
  4.     if (this.value != "Ninguno"){
  5.         var ajax = window.XMLHttpRequest ? new XMLHttpRequest() : new ActiveXObject("Microsoft.XMLHTTP") || new ActiveXObject("Msxml2.XMLHTTP"),
  6.             respuesta = document.getElementById("respuesta");
  7.  
  8.         ajax.open("GET", "segundo_archivo.php?opcion=" + this.value, true);
  9.         ajax.onreadystatechange = function(){
  10.             if (ajax.readyState == 4){
  11.                 switch (ajax.status){
  12.                     case 200:
  13.                         respuesta.innerHTML = ajax.responseText;
  14.                     break;
  15.  
  16.                     case 404:
  17.                         respuesta.innerHTML = "La dirección brindada no existe";
  18.                     break;
  19.  
  20.                     default:
  21.                         respuesta.innerHTML = "Error: " + ajax.status;
  22.                     break;
  23.                 }
  24.             }
  25.         };    
  26.  
  27.         ajax.send();
  28.     }
  29. }, false);

Saludos
__________________
«Juro por mi vida y mi amor por ella, que jamás viviré para el provecho de otro hombre, ni le pediré a otro hombre que viva para el mío».

Ayn Rand

Última edición por Alexis88; 13/04/2014 a las 02:11