Foros del Web » Programando para Internet » Javascript »

Combos Dependientes

Estas en el tema de Combos Dependientes en el foro de Javascript en Foros del Web. Hola Gente, soy nuevo programando en JavaScript... Es la primera vez que posteo en el foro de JavaScript, pero no la primera vez que posteo ...
  #1 (permalink)  
Antiguo 05/04/2008, 14:37
Avatar de i_e_s27  
Fecha de Ingreso: marzo-2008
Ubicación: En mi casa
Mensajes: 208
Antigüedad: 16 años, 8 meses
Puntos: 5
Pregunta Combos Dependientes

Hola Gente, soy nuevo programando en JavaScript... Es la primera vez que posteo en el foro de JavaScript, pero no la primera vez que posteo en ForosDelWeb, recurro y colaboro habitualmente en ASP.

Me encuentro ante un codigo de combobox dependientes (o anidados, como quieran decirle) que me esta dando dolores de cabeza.

El tema es que yo hago el Script de Java con ASP dinámicamente, asi que voy a poner el codigo con el ASP y el codigo que este genera, para que los que no saben ASP no se confundan.

El problema que tengo es que en el combo dependiente me muestra siempre la misma opcion repetida varias veces.

Codigo CON ASP:

Código:
<%@LANGUAGE="VBSCRIPT" CODEPAGE="65001"%>
<%Response.Buffer = True%>
<HTML>
<HEAD><TITLE>Combo Dependiente</TITLE></HEAD>
<body>
<%

Const adOpenForwardOnly = 0 'Es el cursor por defecto y nos permite recorrer el Recordset en forma secuencial.
Const adOpenKeySet = 1 'Permite movernos hacia delante y atrás. Permite observar las modificaciones en los datos del Recordset , no así si existen ingresos de nuevos registros.
Const adOpenDynamic = 2 'Permite movernos en cualquier sentido, viendo cualquier modificación, ingreso o eliminación de datos del Recordset.
Const adOpenStatic = 3 'Permite movernos en cualquier sentido, pero no se verá ningún cambio ocurrido en la tabla.

Const adLockReadOnly = 1 'Es el cerrojo por defecto y no permite modificar los registros de la tabla.
Const adLockPessimistic = 2 'Una vez que alguien abre la tabla, ésta queda bloqueada para los demás usuarios. Con este modo se asegura la integridad de los datos.
Const adLockOptimistic = 3 'La tabla sólo será bloqueada a los demás usuarios mientras se ejecute una operación Update. De esta forma la tabla se bloqueará durante mucho menos tiempo que con el método anterior.
Const adBatchOptimistic = 4 'Los registros serán actualizados en modo batch. 

Dim adoCon
Set adoCon = Server.CreateObject ("ADODB.Connection")
adoCon.open "Provider=Microsoft.Jet.OLEDB.4.0; Data Source=" & Server.MapPath("/MISITIO/dbgeneral.mdb")

Set rsCombo1 = Server.CreateObject("ADODB.Recordset")
Set rsCombo2 = Server.CreateObject("ADODB.Recordset")
strSQLCombo1 = "SELECT * FROM tblcategorias"
strSQLCombo2 = "SELECT * FROM tblsubcategorias"
rsCombo1.Open strSQLCombo1, adoCon, adOpenStatic, adLockOptimistic
rsCombo2.Open strSQLCombo2, adoCon, adOpenStatic, adLockOptimistic

%>
<script language = "JavaScript">
function RellenarCombo(ComboPadre, ComboDependiente) {

  IDItemSeleccionado = ComboPadre.options[ComboPadre.selectedIndex].value

  ComboDependiente.length = 0
  
  Subcategorias = new Array();
<%
	For i = 1 to rsCombo2.RecordCount
		Response.Write("  Subcategorias[" & i & ",0] = """ & rsCombo2("nombre_subcategoria") & """;" & VbCrLf)
		Response.Write("  Subcategorias[" & i & ",1] = """ & rsCombo2("categoria_asociada") & """;" & VbCrLf)
		Response.Write("  Subcategorias[" & i & ",2] = """ & rsCombo2("id") & """;" & VbCrLf)
		rsCombo2.MoveNext
	Next
%>
  var CantidadDeSubcategorias = <%Response.Write(rsCombo2.RecordCount)%>
  
  for(var i=0;i<CantidadDeSubcategorias;i++) {
    if (Subcategorias[i,1] == IDItemSeleccionado) {
      //ComboDependiente.options[i].text=Subcategorias[i,0];
      //ComboDependiente.options[i].value=Subcategorias[i,2];
      var Opcion = new Option(Subcategorias[i,0], Subcategorias[i,2]);
      ComboDependiente.options[ComboDependiente.length]=Opcion;
    }
  }
}
</script>

<form id="AgregarProducto" name="AgregarProducto" method="post" action="">
<label for="categoria">Categoria:</label>
<select name="categoria" id="categoria" onChange="RellenarCombo(document.forms['AgregarProducto'].categoria, document.forms['AgregarProducto'].subcategoria)">
<%
rsCombo1.MoveFirst
For i = 1 to rsCombo1.RecordCount
	Response.Write("  <option value=""" & rsCombo1("id") & """>" & rsCombo1("nombre_categoria") & "</option>")
	Response.Write(VbCrLf)
	rsCombo1.MoveNext
Next 'i
%>
</select>
<label for="subcategoria">Subcategoria:</label>
<select name="subcategoria" id="subcategoria"></select>
<input type="submit" value="Ir" />
</form>


</body>
</html>
Codigo HTML PURO:

Código:
<HTML>
<HEAD><TITLE>Combo Dependiente</TITLE></HEAD>
<body>

<script language = "JavaScript">
function RellenarCombo(ComboPadre, ComboDependiente) {

  IDItemSeleccionado = ComboPadre.options[ComboPadre.selectedIndex].value

  ComboDependiente.length = 0
  
  Subcategorias = new Array();
  Subcategorias[1,0] = "AMD";
  Subcategorias[1,1] = "7";
  Subcategorias[1,2] = "7";
  Subcategorias[2,0] = "Intel";
  Subcategorias[2,1] = "7";
  Subcategorias[2,2] = "8";
  Subcategorias[3,0] = "Nvidia";
  Subcategorias[3,1] = "20";
  Subcategorias[3,2] = "9";
  Subcategorias[4,0] = "ATI";
  Subcategorias[4,1] = "20";
  Subcategorias[4,2] = "10";
  Subcategorias[5,0] = "HP";
  Subcategorias[5,1] = "1";
  Subcategorias[5,2] = "11";
  Subcategorias[6,0] = "Lexmark";
  Subcategorias[6,1] = "1";
  Subcategorias[6,2] = "12";
  Subcategorias[7,0] = "Canon";
  Subcategorias[7,1] = "1";
  Subcategorias[7,2] = "13";
  Subcategorias[8,0] = "Toshiba";
  Subcategorias[8,1] = "17";
  Subcategorias[8,2] = "14";
  Subcategorias[9,0] = "Olivetti";
  Subcategorias[9,1] = "1";
  Subcategorias[9,2] = "15";

  var CantidadDeSubcategorias = 9
  
  for(var i=0;i<Subcategorias.length;i++) {
    if (Subcategorias[i,1] == IDItemSeleccionado) {
      //ComboDependiente.options[i].text=Subcategorias[i,0];
      //ComboDependiente.options[i].value=Subcategorias[i,2];
      var Opcion = new Option(Subcategorias[i,0], Subcategorias[i,2]);
      ComboDependiente.options[ComboDependiente.length]=Opcion;
    }
  }
}
</script>

<form id="AgregarProducto" name="AgregarProducto" method="post" action="">
<label for="categoria">Categoria:</label>
<select name="categoria" id="categoria" onChange="RellenarCombo(document.forms['AgregarProducto'].categoria, document.forms['AgregarProducto'].subcategoria)">
  <option value="1">Cartuchos y Toners</option>
  <option value="2">Discos Ríg y Remov</option>
  <option value="3">Grab/Lect de CD y DVD</option>
  <option value="4">Memorias</option>
  <option value="5">Pen Drives</option>
  <option value="6">Placas de Sonido</option>
  <option value="7">Procesadores</option>
  <option value="8">Scanners</option>
  <option value="9">Software y Programas</option>
  <option value="10">Alimentación</option>
  <option value="11">CDs y DVDs Vírg</option>
  <option value="12">Discos Rígidos</option>
  <option value="13">Gabinetes y Accesorios</option>
  <option value="14">Libros y Manuales</option>
  <option value="15">Modems</option>
  <option value="16">Motherboards</option>
  <option value="17">Notebooks</option>
  <option value="18">Papeles y Resmas</option>
  <option value="19">Perif y Accesorios</option>
  <option value="20">Placas de Video y Editora</option>
  <option value="21">Impresoras</option>

</select>
<label for="subcategoria">Subcategoria:</label>
<select name="subcategoria" id="subcategoria"></select>
<input type="submit" value="Ir" />
</form>


</body>
</html>
Me pueden dar una manito?
Yo creo que el error esta en el for:

for(var i=0;i<Subcategorias.length;i++) {
if (Subcategorias[i,1] == IDItemSeleccionado) {
//ComboDependiente.options[i].text=Subcategorias[i,0];
//ComboDependiente.options[i].value=Subcategorias[i,2];
var Opcion = new Option(Subcategorias[i,0], Subcategorias[i,2]);
ComboDependiente.options[ComboDependiente.length]=Opcion;
}
}


Muchas Gracias por su ayuda!!

Última edición por i_e_s27; 05/04/2008 a las 14:42 Razón: Error de Imprenta xD
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 18:41.