Foros del Web » Programando para Internet » Javascript »

[SOLUCIONADO] Lista Desplegable con valores condicionados en un select inicial

Estas en el tema de Lista Desplegable con valores condicionados en un select inicial en el foro de Javascript en Foros del Web. Buenas a todos. He intentado buscarlo pero no encuentro nada al respecto que me ayude. Voy a intentar explicarlo. La idea es tener un primer ...
  #1 (permalink)  
Antiguo 12/04/2014, 11:27
 
Fecha de Ingreso: abril-2014
Ubicación: Almería
Mensajes: 58
Antigüedad: 10 años
Puntos: 2
Lista Desplegable con valores condicionados en un select inicial

Buenas a todos.

He intentado buscarlo pero no encuentro nada al respecto que me ayude.

Voy a intentar explicarlo.

La idea es tener un primer select, (o lista desplegable) con datos obtenidos de una base de datos mediante PHP. Los datos de este primer desplegable podrían ser por ejemplo:

- Coches
- Motos
- Barcos
- Bicicletas

Habría un segundo desplegable, cuyos datos se obtendrían también mediante consulta mysql con PHP pero estos condicionados a lo que se ha solicitado en el primer desplegable.

Si se ha seleccionado coches, deberían aparecer por ejemplo marcas de coches, si se ha seleccionado bicicletas, marcas de bicicletas.

Lo que me falta en resumen y con lo que llevo varios días es ese trocito de código javascript que me ayude a llamar al PHP de la segunda consulta y rellenar el segundo select.

¿Alguien puede ayudarme? Estoy bastante desesperado. Si fuese necesario pego un ejemplo de código.

Muchas gracias a todos.
  #2 (permalink)  
Antiguo 12/04/2014, 13:43
Avatar de 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
  #3 (permalink)  
Antiguo 13/04/2014, 06:08
 
Fecha de Ingreso: abril-2014
Ubicación: Almería
Mensajes: 58
Antigüedad: 10 años
Puntos: 2
Respuesta: Lista Desplegable con valores condicionados en un select inicial

En primer lugar muchas gracias por contestar. Creo que voy por buen camino, pero aún no me funciona. El código resultante es el siguiente:

Código PHP:
<?php header('Content-type: text/html; charset=utf-8');


                        
$con=mysql_connect("localhost","root","");
                        
mysql_select_db("base",$con);
                        
$consulta="select * from plagas";
                        
$datos=mysql_query($consulta,$con);
                        
$array=mysql_fetch_array($datos);
                        echo 
"<form action='' method='post'>
                        <select id = 'plagas' name = 'plagas'>"
;
                        echo 
"<option value='Ninguno'>Selecciona un opcion...</option>";
                        do{
                            
$plaga=$array['plaga'];
                            echo 
"<option value='$plaga'>$plaga</option>";
                        } while (
$array=mysql_fetch_array($datos));
                        
mysql_close($con);
                        
                        
?>                        
            
            <div id="respuesta"></div>
            
            </form>
            <script type="text/javascript" src="/js/jquery.js"></script>
            <script>            
                $("#plagas").change(function(){
                    if ($(this).val() != "Ninguno"){
                        $.ajax({
                            url: "/segundo_archivo.php",
                            type: "GET",
                            data: {
                                opcion: $(this).val()
                            }
                        }).done(function(response){
                            $("#respuesta").html(response);
                        }).fail(function(jqXHR, textStatus){
                            $("#respuesta").html("Ha ocurrido un error: " + textStatus);
                        });
                    }
                });

                </script>

Y el segundo archivo PHP:

Código PHP:
<?php header('Content-type: text/html; charset=utf-8');


                        
$con=mysqli_connect("localhost","root","");
                        
mysqli_select_db("base",$con);
                        
                        
$opcion mysqli_real_escape_string(strip_tags($_GET["opcion"]));
                        
$query mysqli_query($con"SELECT * FROM productos WHERE plaga = '$opcion'");
                        if (
mysqli_num_rows($query)){
?>


    <select id = "productos" name = "productos">
<?php
    
while ($row mysqli_fetch_array($query)){
?>
        <option value = <?=$row["producto"]?> <?=$row["producto"]?> </option>
<?php        
    
}
    
mysqli_free_result($query);
?>
    </select>
<?php
}
?>

Cuando lo ejecuto sólo me aparece la primera lista pero no la segunda. No sé si la libreria que estoy usando sería la correcta:
Código HTML:
<script type="text/javascript" src="/js/jquery.js"></script> 
O bien es que el div de la segunda lista debe de ir entre otras etiquetas.
Código HTML:
<select id = "productos" name = "productos"> 
He probado varias cosas pero sin suerte, en cualquier caso, si me pudierais echar una mano en detectar el fallo lo agradecería mucho.

Saludos.
  #4 (permalink)  
Antiguo 13/04/2014, 10:50
Avatar de 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

¿Estás seguro de que el archivo que hace la búsqueda del dato seleccionado se llama segundo_archivo.php?, ten en cuenta que es un nombre que puse como ejemplo; si no es el nombre del archivo, debes poner el que corresponda. En cuanto a la librería, si tienes dudas, en su lugar usar este enlace como referencia: http://code.jquery.com/jquery-2.1.0.min.js

Por cierto, te falta cerrar el primer <select>. Por otro lado, también tienes la opción de probar el método Ajax implementado en código nativo de JavaScript, con ese no es necesario que tengas la librería jQuery. No olvides colocar el código JavaScript justo antes de la etiqueta </body>, pero si lo vas a colocar en la cabecera del documento, asegúrate de que el DOM haya cargado completamente.

Código Javascript:
Ver original
  1. $(document).ready(function(){
  2.     //Código
  3. });

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
  #5 (permalink)  
Antiguo 18/04/2014, 04:42
 
Fecha de Ingreso: abril-2014
Ubicación: Almería
Mensajes: 58
Antigüedad: 10 años
Puntos: 2
Respuesta: Lista Desplegable con valores condicionados en un select inicial

He conseguido al final hacerlo funcionar. El error probablemente estaría en el segundo archivo.

He cambiado esto:
Código PHP:
<option value = <?=$row["producto"]?> <?=$row["producto"]?> </option>
por esto otro:

Código PHP:
while ($row mysql_fetch_array($query)){

                           
$producto $row["producto"];
                        echo
'<option value = "$producto">'.$producto.'</option>';
       
                } 
Y ya funciona perfectamente.

Muchas gracias por toda la ayuda. Espero poder colaborar más en el foro a partir de ahora, ya que muchas dudas se me han resuelto sin necesidad de registrarme, ahora que estoy registrado intentaré ayudar yo también.
  #6 (permalink)  
Antiguo 02/05/2015, 04:04
 
Fecha de Ingreso: mayo-2015
Mensajes: 1
Antigüedad: 8 años, 11 meses
Puntos: 0
Respuesta: Lista Desplegable con valores condicionados en un select inicial

tengo un problema parecido . Mi codigo :
<FORM NAME="top_form" METHOD="POST" ACTION="php/tframe.php">
<TABLE COLS="4" style="text-align:center;width:20em;font-size:1.2em;margin-top:10px;margin-bottom:0">
<TR>
<TD COLSPAN="4" style="padding:5px 0px">
<b>Seleccione un item de la lista:</b><br>
<SELECT ID="item" NAME="item" style="width:100%" ONCHANGE='parent.BOTTOM.location="bframe.php";docu ment.top_form.submit()'>
<? function load_items() {
global $items1, $items2, $items3, $items4;

$selected=0;

foreach (array_merge($items1, $items2, $items3, $items4) as $item) {
print '<option value="'.$codes[$item].'"';
if (!$selected and $_REQUEST['item']==$codes[$item]) {
print " selected";
$selected=1;
}
print ">$item</option>\n";
}
} ?>
</SELECT>
</TD>
</TR>
<?
# Código con los botones a mostrar dependiendo del item seleccionado
load_buttons();
?>
</TABLE>


No consigo ver el contenido en el desplegable

Etiquetas: desplegable, inicial, lista, php, select
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 23:45.