Ver Mensaje Individual
  #51 (permalink)  
Antiguo 28/03/2009, 23:00
Avatar de sjam7
sjam7
 
Fecha de Ingreso: diciembre-2001
Ubicación: Guadalajara, Mexico
Mensajes: 3.672
Antigüedad: 22 años, 11 meses
Puntos: 16
Respuesta: combobox dependientes con ajax.

Bueno, aunque es un tema viejo revivido recientemente pondre mi solucion para sus comentarios y por si de algo sirve, aclaro que no soy un experto ni en ASP ni mucho menos en AJAX, pero pues es una forma muy simple que yo estoy utilizando en algunos sitios actualmente, en este caso pondre uno para 3 selects dependientes:

1.- Necesitamos un archivo JS que se puede descargar aqui: ajax_loader.js

Y lo ponemos entre las etiquetas HEAD asi:
<script src="ajax_loader.js" type="text/javascript"></script>

2.- En el HTML armamos nuestros combos dependientes, podria haber 2 formas de hacerlo, una seria ir poniendo los combos hasta que se haya seleccionado el combo anterior o bien, poner los 3 combos desde un principio.

Aqui vamos a ponerlo de la segunda forma:

Aqui ponemos el codigo del primer select utilizando ahi mismo la conexion a la base de datos si asi lo requiere:
Código html:
Ver original
  1. <%Set RSt = Server.CreateObject("ADODB.Recordset")
  2.         SQLt="Select * from TABLA order by id ASC"
  3.         RSt.open sqlt, conexion%>
  4.         <select name="servicio" class="sel" onChange="htmlData('[B]cambia.asp[/B]', '[B]select2[/B]', '[B]en=1&ser='+servicio.value[/B])">
  5.             <option value=""> -- Selecciona una opcion -- </option>
  6.             <%do while not rst.eof%>
  7.                 <option value="<%=rst("id")%>"><%=rst("nombre")%></option>
  8.             <%end if
  9.         rst.movenext
  10.         loop%>
  11.             </select>
  12.         <%rst.close
  13.     set rst=nothing%>
  14.         </div>

Aqui resalto la parte del onChange, esto genera una accion cuando se hace algun cambio en el select, en esta parte hay 3 partes que hay que cambiar y tener identificadas:
- cambia.asp: es un archivo que debemos generar y que sera el que haga la gestion entre la base de datos y nos imprimira los demas selects, mas adelante lo pondremos.
- select2: es un DIV en donde se mostrara el resultado de la consulta, este nombre debera ser el mismo que el DIV donde se pondra el resultado, aqui es donde podemos escoger si imprimir los demas selects desde el principio o hasta haber seleccionado el primero. Si queremos usar la segunda opcion simplemente creamos el DIV vacio:
<div id="select2"></div>

Si deseamos la segunda opcion podemos hacer lo siguiente:
Código HTML:
Ver original
  1. <div id="select2">
  2.         <select name="select2" disabled="disabled">
  3.             <option value=""> -- Selecciona un servicio -- </option>
  4.         </select>
  5. </div>
NOTA: deje desactivado el select por que no tiene informacion

Igual hacemos con el tercer select
<div id="select3">
<select name="select3" disabled="disabled">
<option value=""> -- Selecciona un servicio -- </option>
</select>
</div>
<img src="enviar.jpg" onClick="javascript:document.frm.submit();" />

- en=1&ser='+servicio.value, esta parte lo que genera es darle el valor a las variables que se van a enviar al archivo, en este caso cambia.asp, en este caso mandamos una variable en, que sera en el archivo cambia.asp la opcion que vamos a tomar y la parte ser nos manda el valor del select seleccionado.

Ahora vamos a ver el archivo cambia.asp:
Código asp:
Ver original
  1. <!--#include file="conexion.inc" -->
  2. <%Response.CharSet = "ISO-8859-1"
  3. Response.addHeader "pragma", "no-cache"
  4. Response.CacheControl = "Private"
  5. Response.Expires = 0
  6.  
  7. en=request("en")
  8.  
  9. if en=1 then 'ACTUALIZA SELECT 1
  10.        sel2=request("ser")
  11.         if sel2<>"" then
  12.        Set RSt = Server.CreateObject("ADODB.Recordset")
  13.        SQLt="Select * from TABLA WHERE id="&sel2&" order by nombre ASC"
  14.     RSt.open sqlt, conexion%>
  15.         <select name="select2" onchange="htmlData('cambia.asp', 'select3', 'en=2&sel2='+select2.value)">
  16.             <option value=""> -- Selecciona una opcion -- </option>
  17.             <%do while not rst.eof%>
  18.                 <option value="<%=rst("id")%>"><%=rst("nombre")%></option>
  19.             <%end if
  20.             rst.movenext
  21.         loop%>
  22.         </select>
  23.         <%rst.close
  24.     set rst=nothing%>
  25.         <%else%>
  26.         <select name="select2" disabled="disabled">
  27.             <option value=""> -- Selecciona un servicio -- </option>
  28.         </select>
  29.        
  30.         <%end if
  31.  
  32. elseif en=2 then 'ACTUALIZAR SELECT 2
  33.  
  34.        sel3=request("ser")
  35.         if sel3<>"" then
  36.        Set RSt = Server.CreateObject("ADODB.Recordset")
  37.        SQLt="Select * from TABLA WHERE id="&sel3&" order by nombre ASC"
  38.     RSt.open sqlt, conexion%>
  39.         <select name="select3">
  40.             <option value=""> -- Selecciona una opcion -- </option>
  41.             <%do while not rst.eof%>
  42.                 <option value="<%=rst("id")%>"><%=rst("nombre")%></option>
  43.             <%end if
  44.             rst.movenext
  45.         loop%>
  46.         </select>
  47.         <%rst.close
  48.     set rst=nothing%>
  49.         <%else%>
  50.         <select name="select3" disabled="disabled">
  51.             <option value=""> -- Selecciona un servicio -- </option>
  52.         </select>
  53.        
  54.         <%end if
  55. end if

NOTA: lo que nos de como resultado el archivo ASP cambia.asp sera lo que se imprima en el DIV puesto en la funcion htmlData

Se que no soy el mejor explicando pero cualquier duda estoy a sus ordenes
__________________
CreandoWebs.com
www.creandowebs.com
PLANTILLAS TEMPLATEMONSTER CON 10% DE DESCUENTO