• Miércoles 8 de Mayo de 2024, 21:10

Autor Tema:  Select Dependientes  (Leído 7885 veces)

neorent

  • Miembro MUY activo
  • ***
  • Mensajes: 249
    • Ver Perfil
    • http://www.laestokada.cl
Select Dependientes
« en: Jueves 17 de Julio de 2008, 22:52 »
0
Estimados Todos:

bueno hace tiempo que vengo ocupando ajax, para hacer select dependientes de nivel y me ha funcionado super bien, el tema es que ahora me ha presentado algo que no se como solucionar y ver si alguno de ustedes me puede ayudar.

el tema es el siguiente, nevegando con internet explorer, me despliega el select generado por ajax, el tema es que no le puedo dar un ancho fijo y si lo que estoy consultando es demasiado largo no me funciona bien, ahora en mozilla resulta bien les dejo dos imagenes para que vean a lo que me refiero.

Aqui con Internet Explorer


Aqui con Mozilla



el tema es que no se como solucionarlo, le voy a dejar todos los codigos que se ocupan a ver si ustedes encuentran algo y me lo pueden indicar.
si desean saber de donde saque este codigo les dejo el link.
http://www.formatoweb.com.ar/ajax/select_dependientes.php

Conexion.php
Código: Text
  1. <?php
  2. function conectar()
  3. {
  4.     mysql_connect("localhost", "root", "");
  5.     mysql_select_db("ajax");
  6. }
  7.  
  8. function desconectar()
  9. {
  10.     mysql_close();
  11. }
  12. ?>
  13.  

Select_dependiente.php
Código: Text
  1. <?php
  2. function generaPaises()
  3. {
  4.     include 'conexion.php';
  5.     conectar();
  6.     $consulta=mysql_query("SELECT id, opcion FROM lista_paises");
  7.     desconectar();
  8.  
  9.     // Voy imprimiendo el primer select compuesto por los paises
  10.     echo "<select name='paises' id='paises' onChange='cargaContenido(this.id)'>";
  11.     echo "<option value='0'>Elige</option>";
  12.     while($registro=mysql_fetch_row($consulta))
  13.     {
  14.         echo "<option value='".$registro[0]."'>".$registro[1]."</option>";
  15.     }
  16.     echo "</select>";
  17. }
  18. ?>
  19.  
  20. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
  21. <html lang="es">
  22. <head>
  23. <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
  24. <title>AJAX, Ejemplos: Combos (select) dependientes, codigo fuente - ejemplo</title>
  25. <link rel="stylesheet" type="text/css" href="select_dependientes.css">
  26. <script type="text/javascript" src="select_dependientes.js"></script>
  27. </head>
  28.  
  29. <body>
  30.  
  31.             <div id="demo" style="width:600px;">
  32.                 <div id="demoDer">
  33.                     <select disabled="disabled" name="estados" id="estados">
  34.                         <option value="0">Selecciona opción...</option>
  35.                     </select>
  36.                 </div>
  37.                 <div id="demoIzq"><?php generaPaises(); ?></div>
  38.             </div>
  39.            
  40. </body>
  41. </html>
  42.  

Select_dependiente_proceso.php

Código: Text
  1. <?php
  2. // Array que vincula los IDs de los selects declarados en el HTML con el nombre de la tabla donde se encuentra su contenido
  3. $listadoSelects=array(
  4. "paises"=>"lista_paises",
  5. "estados"=>"lista_estados"
  6. );
  7.  
  8. function validaSelect($selectDestino)
  9. {
  10.     // Se valida que el select enviado via GET exista
  11.     global $listadoSelects;
  12.     if(isset($listadoSelects[$selectDestino])) return true;
  13.     else return false;
  14. }
  15.  
  16. function validaOpcion($opcionSeleccionada)
  17. {
  18.     // Se valida que la opcion seleccionada por el usuario en el select tenga un valor numerico
  19.     if(is_numeric($opcionSeleccionada)) return true;
  20.     else return false;
  21. }
  22.  
  23. $selectDestino=$_GET["select"]; $opcionSeleccionada=$_GET["opcion"];
  24.  
  25. if(validaSelect($selectDestino) && validaOpcion($opcionSeleccionada))
  26. {
  27.     $tabla=$listadoSelects[$selectDestino];
  28.     include 'conexion.php';
  29.     conectar();
  30.     $consulta=mysql_query("SELECT id, opcion FROM $tabla WHERE relacion='$opcionSeleccionada'") or die(mysql_error());
  31.     desconectar();
  32.    
  33.     // Comienzo a imprimir el select
  34.     echo "<select name='".$selectDestino."' id='".$selectDestino."' onChange='cargaContenido(this.id)'>";
  35.     echo "<option value='0'>Elige</option>";
  36.     while($registro=mysql_fetch_row($consulta))
  37.     {
  38.         // Convierto los caracteres conflictivos a sus entidades HTML correspondientes para su correcta visualizacion
  39.         $registro[1]=htmlentities($registro[1]);
  40.         // Imprimo las opciones del select
  41.         echo "<option value='".$registro[0]."'>".$registro[1]."</option>";
  42.     }          
  43.     echo "</select>";
  44. }
  45. ?>
  46.  

y el javascript que lo genera.
Select_Dependiente.js
Código: Text
  1. function nuevoAjax()
  2. {
  3.     /* Crea el objeto AJAX. Esta funcion es generica para cualquier utilidad de este tipo, por
  4.     lo que se puede copiar tal como esta aqui */
  5.     var xmlhttp=false;
  6.     try
  7.     {
  8.         // Creacion del objeto AJAX para navegadores no IE
  9.         xmlhttp=new ActiveXObject("Msxml2.XMLHTTP");
  10.     }
  11.     catch(e)
  12.     {
  13.         try
  14.         {
  15.             // Creacion del objet AJAX para IE
  16.             xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
  17.         }
  18.         catch(E)
  19.         {
  20.             if (!xmlhttp && typeof XMLHttpRequest!='undefined') xmlhttp=new XMLHttpRequest();
  21.         }
  22.     }
  23.     return xmlhttp;
  24. }
  25.  
  26. // Declaro los selects que componen el documento HTML. Su atributo ID debe figurar aqui.
  27. var listadoSelects=new Array();
  28. listadoSelects[0]="paises";
  29. listadoSelects[1]="estados";
  30.  
  31. function buscarEnArray(array, dato)
  32. {
  33.     // Retorna el indice de la posicion donde se encuentra el elemento en el array o null si no se encuentra
  34.     var x=0;
  35.     while(array[x])
  36.     {
  37.         if(array[x]==dato) return x;
  38.         x++;
  39.     }
  40.     return null;
  41. }
  42.  
  43. function cargaContenido(idSelectOrigen)
  44. {
  45.     // Obtengo la posicion que ocupa el select que debe ser cargado en el array declarado mas arriba
  46.     var posicionSelectDestino=buscarEnArray(listadoSelects, idSelectOrigen)+1;
  47.     // Obtengo el select que el usuario modifico
  48.     var selectOrigen=document.getElementById(idSelectOrigen);
  49.     // Obtengo la opcion que el usuario selecciono
  50.     var opcionSeleccionada=selectOrigen.options[selectOrigen.selectedIndex].value;
  51.     // Si el usuario eligio la opcion "Elige", no voy al servidor y pongo los selects siguientes en estado "Selecciona opcion..."
  52.     if(opcionSeleccionada==0)
  53.     {
  54.         var x=posicionSelectDestino, selectActual=null;
  55.         // Busco todos los selects siguientes al que inicio el evento onChange y les cambio el estado y deshabilito
  56.         while(listadoSelects[x])
  57.         {
  58.             selectActual=document.getElementById(listadoSelects[x]);
  59.             selectActual.length=0;
  60.            
  61.             var nuevaOpcion=document.createElement("option"); nuevaOpcion.value=0; nuevaOpcion.innerHTML="Selecciona Opción...";
  62.             selectActual.appendChild(nuevaOpcion);  selectActual.disabled=true;
  63.             x++;
  64.         }
  65.     }
  66.     // Compruebo que el select modificado no sea el ultimo de la cadena
  67.     else if(idSelectOrigen!=listadoSelects[listadoSelects.length-1])
  68.     {
  69.         // Obtengo el elemento del select que debo cargar
  70.         var idSelectDestino=listadoSelects[posicionSelectDestino];
  71.         var selectDestino=document.getElementById(idSelectDestino);
  72.         // Creo el nuevo objeto AJAX y envio al servidor el ID del select a cargar y la opcion seleccionada del select origen
  73.         var ajax=nuevoAjax();
  74.         ajax.open("GET", "select_dependientes_proceso.php?select="+idSelectDestino+"&opcion="+opcionSeleccionada, true);
  75.         ajax.onreadystatechange=function()
  76.         {
  77.             if (ajax.readyState==1)
  78.             {
  79.                 // Mientras carga elimino la opcion "Selecciona Opcion..." y pongo una que dice "Cargando..."
  80.                 selectDestino.length=0;
  81.                 var nuevaOpcion=document.createElement("option"); nuevaOpcion.value=0; nuevaOpcion.innerHTML="Cargando...";
  82.                 selectDestino.appendChild(nuevaOpcion); selectDestino.disabled=true;    
  83.             }
  84.             if (ajax.readyState==4)
  85.             {
  86.                 selectDestino.parentNode.innerHTML=ajax.responseText;
  87.             }
  88.         }
  89.         ajax.send(null);
  90.     }
  91. }
  92.  

ojala que me puedan ayudar,
saludos a todos y gracias desde ya por leer este post,
Neo.
El mensaje contiene 1 archivo adjunto. Debes ingresar o registrarte para poder verlo y descargarlo.
Un Tigre Nunka Kambia Sus Rayas

F_Tanori

  • Moderador
  • ******
  • Mensajes: 1919
  • Nacionalidad: mx
    • Ver Perfil
Re: Select Dependientes
« Respuesta #1 en: Viernes 18 de Julio de 2008, 06:09 »
0
Hola, para hacer ,mas ancho un select puedes usar los siguiente
a ver si esto te sirve

Código: Text
  1. <select name="select1" style="width:300px">
  2. ...
  3.  

o con class

Código: CSS
  1. .Ancho {
  2.    width:300px;
  3. }
  4.  
  5.  

Código: Text
  1. <select name="select1" class='Ancho'>
  2. ...
  3.  


Saludos
" ExIsTo y A vEcEs PiEnSo "

NOTA:
===========================================================================================================================
Este foro es para ayudar, aprender, compartir... usenlo para eso,
NO SE RESUELVEN DUDAS POR MENSAJE PRIVADO Y MENOS POR CORREO
===========================================================================================================================

neorent

  • Miembro MUY activo
  • ***
  • Mensajes: 249
    • Ver Perfil
    • http://www.laestokada.cl
Re: Select Dependientes
« Respuesta #2 en: Viernes 18 de Julio de 2008, 16:00 »
0
muchas gracias funciono a la perfeccion!!!,
saludos,
Neo.
Un Tigre Nunka Kambia Sus Rayas

agpucci

  • Nuevo Miembro
  • *
  • Mensajes: 1
    • Ver Perfil
Re: Select Dependientes
« Respuesta #3 en: Viernes 14 de Agosto de 2009, 21:00 »
0
Hola... yo estoy con este codigo tambien, y le queria hacer una modificacion pero no me funciona.

quiero que la pirmera lista, en ves de ser listas sean radio button, se puede eso??


Muchas gracias