Foros del Web » Programando para Internet » ASP Clásico »

3 combos anidados

Estas en el tema de 3 combos anidados en el foro de ASP Clásico en Foros del Web. Holas, como puedo hacer para anidar 3 combos sin q la pagina refresque??...
  #1 (permalink)  
Antiguo 31/08/2004, 17:51
 
Fecha de Ingreso: enero-2002
Ubicación: Callao - Perú
Mensajes: 1.127
Antigüedad: 22 años, 5 meses
Puntos: 0
Exclamación 3 combos anidados

Holas, como puedo hacer para anidar 3 combos sin q la pagina refresque??
__________________
SaLuDoS dE:
PePeLuChO dEl PeRú PaRa El MuNdO
  #2 (permalink)  
Antiguo 01/09/2004, 14:57
Avatar de lexus  
Fecha de Ingreso: enero-2002
Ubicación: Cali - Colombia
Mensajes: 2.234
Antigüedad: 22 años, 5 meses
Puntos: 4
HOLA, dame tu email y te envio uin ejemplo que tengo aqui.
__________________
Control de Visitantes, Control de Accesos, Minutas digitales, Manejo de Correspondencia
http://www.controldevisitantes.com
  #3 (permalink)  
Antiguo 01/09/2004, 15:06
Avatar de lexus  
Fecha de Ingreso: enero-2002
Ubicación: Cali - Colombia
Mensajes: 2.234
Antigüedad: 22 años, 5 meses
Puntos: 4
ya te envie un correo con los codigos, si deseas publicalos aqui para que la demas gente qeu busca lo mismo tenga acceso a ellos.
suerte
__________________
Control de Visitantes, Control de Accesos, Minutas digitales, Manejo de Correspondencia
http://www.controldevisitantes.com
  #4 (permalink)  
Antiguo 02/09/2004, 07:52
 
Fecha de Ingreso: octubre-2003
Ubicación: Dominican Republic
Mensajes: 25
Antigüedad: 20 años, 8 meses
Puntos: 0
Buenas

Lexus eso de los 3 combos anidados esta interesante, ando buscando algo parecido pero para 5, me puedes mandar el k tu tienes para ver si le encuentro la vuelta y adaptarlo a mis requerimientos?

mi correo es [email protected], o [email protected]

Gracias de antemano.
  #5 (permalink)  
Antiguo 02/09/2004, 07:55
Avatar de Myakire
Colaborador
 
Fecha de Ingreso: enero-2002
Ubicación: Centro de la república
Mensajes: 8.849
Antigüedad: 22 años, 4 meses
Puntos: 146
Mejor publicalo en las FAQ's Lexus, saludos
  #6 (permalink)  
Antiguo 02/09/2004, 09:38
Avatar de Fabu_dina  
Fecha de Ingreso: enero-2004
Mensajes: 425
Antigüedad: 20 años, 5 meses
Puntos: 1
Hokodan

Ya te pasaron ese codigo para que me lo envies yo ando tras algo igual

gracias

[email protected]
  #7 (permalink)  
Antiguo 02/09/2004, 09:47
Avatar de lexus  
Fecha de Ingreso: enero-2002
Ubicación: Cali - Colombia
Mensajes: 2.234
Antigüedad: 22 años, 5 meses
Puntos: 4
hola, que pena no recuerdo en el momento quien publico este mensaje asi que que pena por no colocar los creditos, en fin, aqui lo pego para que lo usen los qeu les sirve
suerte



Código:
  <% response.buffer = true %>
<Script language="VBScript" RUNAT="SERVER">
FUNCTION Genera_OptionCollection(oCollection,CSqlString)
' Esta funcion genera un arreglo con los que recupera de la base de datos para el 2 y 3er combo
Comilla = Chr(34)
SET oHandle=Server.CreateObject("ADODB.Connection")
oHandle.Open "Oracle8"
SET oRegistro = oHandle.Execute(CSqlString) 
Genera_OptionCollection = "<scri" & "pt language='JavaScript'>" & vbCrlf
Genera_OptionCollection = Genera_OptionCollection &_
"var " & oCollection & " = new OptionCollection();" & vbCrlf
oRegistro.MoveFirst
DO UNTIL oRegistro.Eof
' Ejemplo: oSubFuncion.Add("0101","Descripción del Catalogo","01");
Genera_OptionCollection = Genera_OptionCollection &_
oCollection & ".Add(" & Comilla & oRegistro("Child")& Comilla & "," &_
Comilla & oRegistro("ChildCaption")& Comilla & "," &_
Comilla & oRegistro("Parent")& Comilla & ");" & vbCrlf
oRegistro.MoveNext
LOOP 
oRegistro.Close
oHandle.Close 
Genera_OptionCollection = Genera_OptionCollection & "</scr" & "ipt>" & vbCrlf
END FUNCTION
</script>
<HTML>
<HEAD>
<TITLE>Combos</TITLE>
<!--INCLUIR ESTE ARCHIVO, ES EL QUE HACE TODO!!! -->
<script language=Javascript src="optionex.js"></script>
</HEAD>
<BODY>
<% 
' -------------------------- Aqui armo la cadena que llena el segundo combo -----------------------------
CSqlString = "SELECT CSCClave||CSCCapitu Child,CSCDescri ChildCaption,CSCCapitu Parent " &_
"FROM SATCSubCapit " &_
"ORDER BY Parent,Child,ChildCaption"
Response.Write Genera_OptionCollection("oSubCapit",CSqlString)
' -------------------------- Aqui armo la cadena que llena el tercer combo -----------------------------
CSqlString = "SELECT CPAClave||CPaSubCap||CPaCapitu Child,CPaDescri ChildCaption,CPaSubCap||CPaCapitu Parent " &_
"FROM SATCPartida " &_
"ORDER BY Parent,Child,ChildCaption"
Response.Write Genera_OptionCollection("oPartida",CSqlString)
%>
<form name=forma>
<table>
<tr> 
<td align=right valign=top>Capitulo </td>
<td align=left valign=top> 
<SELECT name="PCapitulo" onchange="UpdateSelect('SubCap','forma',this.options[this.selectedIndex].value,oSubCapit);" style="width:400px;">
<%' Aqui construimos La Lista del primer combo
SET oHandle=Server.CreateObject("ADODB.Connection")
oHandle.Open "Oracle8"
CSqlString = "SELECT CCaClave,SUBSTR(CCaDescri,1,50) CCaDescri " &_
"FROM SaTCCapitulo " &_
"ORDER BY CCaClave"
SET oRegistroCa = oHandle.Execute(CSqlString)
oRegistroCa.MoveFirst
Do UNTIL oRegistroCa.EOF %>
<OPTION Value="<%=oRegistroCa("CCaClave")%>"> 
<%=oRegistroCa("CCaDescri")%> </option>
<% oRegistroCa.MoveNext 
LOOP
oRegistroCa.close 
%>
</SELECT> </td>
</tr>
<tr> 
<td align=right valign=top>Subcapitulo</td>
<td align=left valign=top><SELECT name="SubCap" onchange="UpdateSelect('Partida','forma',this.options[this.selectedIndex].value,oPartida);" style="width:400px;">
<option>[Seleccione un valor]</option>
</select></td> 
</tr>
<tr> 
<td align=right valign=top><font size="2" face="Arial, Helvetica, sans-serif"><strong>Partida</strong></font>:</td>
<td align=left valign=top><SELECT name="Partida" style="width:400px;">
<option>[Seleccione un valor]</option>
</select></td>
</tr>
</table>
</form>
</BODY>
</HTML>

Aqui pongo el archivo que se llama optionex.js, a este no le tienen que modificar NADA
var NS4 = (document.layers)?true:false;
var IE4 = (document.all)?true:false;
function _struct(child,childcaption,parent){
this.child = child;
this.childcaption = childcaption;
this.parent = parent;
}
function _addobject(child,childcaption,parent){
var obj = new _struct();
obj.child = child;
obj.childcaption = childcaption;
obj.parent = parent;
return(obj);
}
function insertEntry(child,childcaption,parent){
if(child.length > 0 ){ 
for(var i=0;i<this.length;i++)
if(this.items[i].child == child)
return; 
this.items[this.length++] = _addobject(child,childcaption,parent); 
}
}
function OptionCollection(){
this.length=0;
this.items = new Object();
this.Add=insertEntry
}
function clearSelect(oSelect){
var iCount=0;
if(!oSelect) return;
iCount = oSelect.options.length;
for(var i=0;i<iCount;i++){
if(IE4)
oSelect.options.remove(0);
else if(NS4)
oSelect.options[0]=null;
}
}
function agregaOpcion(oSelect,nIndice,cClave,cDescri){
elSelectOption = new Option();
elSelectOption.value = cClave;
elSelectOption.text = cDescri;
if(NS4) oSelect.options[nIndice] = elSelectOption;
else if(IE4) oSelect.options.add(elSelectOption,nIndice);
delete(elSelectOption);
}
function addOptions(oSelect,olist,parent){
var elOption;
var idxSelect=0; 
//check arguments.
if((!olist) || (!oSelect))return; 
if(parent.length <= 0) return;
//now looop through all the list items only entering relevant options.
clearSelect(oSelect); 
//add a blank list
// - elBlankOption = new Option();
// - elBlankOption.text = "";
// - if(NS4) oSelect.options[0] = elBlankOption
// - else if(IE4) oSelect.options.add(elBlankOption,0)
// - elBlankOption.value = "";
for(var i=0;i<olist.length;i++){ 
//only the child entries of the parent 
if(olist.items[i].parent == parent){
if(idxSelect==0){
agregaOpcion(oSelect,0,"","Seleccione un valor de la lista");
idxSelect++;
} 
elOption = new Option();
//now IE and NS have a different way to handle object creation.
if(NS4){
elOption.value = olist.items[i].child
elOption.text = olist.items[i].childcaption
oSelect.options[idxSelect] = elOption 
}else if(IE4){ 
elOption.value = olist.items[i].child
elOption.text = olist.items[i].childcaption
oSelect.options.add(elOption,idxSelect) 
} 
idxSelect++;
delete(elOption);
} 
}
if(oSelect.length<=0){
agregaOpcion(oSelect,0,"","No se encontraron valores coincidentes");
}
oSelect.selectedIndex = 0; 
}
function clearOptions(szSelect,szForm){
if(szSelect.length <= 0 || szForm.length <=0)
alert("error:clearOption must pass arguments"); 
if(IE4)
clearSelect(document.all.item(szSelect));
else if(NS4)
clearSelect(eval('document.' + szForm + '.' + szSelect));
}
function listAllOptions(szSelect,szForm,olist){
var elOption;
var idxSelect=0;
var oSelect = new Object();
//check arguments.
if(!olist)return; 
if(IE4)
oSelect = document.all.item(szSelect);
else if(NS4)
oSelect = eval('document.' + szForm + '.' + szSelect);
if(!oSelect)return; 
//now looop through all the list items entering all
clearSelect(oSelect);
for(var i=0;i<olist.length;i++){ 
elOption = new Option();
//now IE and NS have a different way to handle object creation.
if(NS4){ 
elOption.value = olist.items[i].child
elOption.text = olist.items[i].childcaption
oSelect.options[idxSelect] = elOption 
}else if(IE4){ 
elOption.value = olist.items[i].child
elOption.text = olist.items[i].childcaption
oSelect.options.add(elOption,idxSelect) 
} 
idxSelect++;
delete(elOption); 
} 
}
function UpdateSelect(szSelect,szForm,szParent,olist){
if(IE4)
addOptions(document.all.item(szSelect),olist,szParent);
else if(NS4)
addOptions(eval('document.' + szForm + '.' + szSelect),olist,szParent);
}
 
 
------------------------------
Otra cosa y muy importante es que el arreglo debe ser unico, por ejemplo:
Esto seria incorrecto, ya que hay dos 01, aunque provengan de padres diferentes
oSubCapit.Add("01","SERVICIOS PERSONALES","1");
oSubCapit.Add("01","SERVICIOS PERSONALES","2");
Esto seria lo correcto, concatenarle al hijo la clave del padre:
oSubCapit.Add("011","SERVICIOS PERSONALES","1");
oSubCapit.Add("012","SERVICIOS PERSONALES","2");
y asi ya se hace unico
__________________
Control de Visitantes, Control de Accesos, Minutas digitales, Manejo de Correspondencia
http://www.controldevisitantes.com
  #8 (permalink)  
Antiguo 09/09/2004, 11:23
 
Fecha de Ingreso: septiembre-2004
Mensajes: 1
Antigüedad: 19 años, 9 meses
Puntos: 0
Podrias colaborarme?

Hola, estoy revisando tu codigo para adaptarlo, pero no entiendo muy bien, pues hasta ahora estoy empezando con esto, podrias explicarme que cambio hacer para no hacer acceso a BD y quemar los datos directamente?

Gracias, mi correo [email protected]



Cita:
Iniciado por lexus
hola, que pena no recuerdo en el momento quien publico este mensaje asi que que pena por no colocar los creditos, en fin, aqui lo pego para que lo usen los qeu les sirve
suerte



Código:
  <% response.buffer = true %>
<Script language="VBScript" RUNAT="SERVER">
FUNCTION Genera_OptionCollection(oCollection,CSqlString)
' Esta funcion genera un arreglo con los que recupera de la base de datos para el 2 y 3er combo
Comilla = Chr(34)
SET oHandle=Server.CreateObject("ADODB.Connection")
oHandle.Open "Oracle8"
SET oRegistro = oHandle.Execute(CSqlString) 
Genera_OptionCollection = "<scri" & "pt language='JavaScript'>" & vbCrlf
Genera_OptionCollection = Genera_OptionCollection &_
"var " & oCollection & " = new OptionCollection();" & vbCrlf
oRegistro.MoveFirst
DO UNTIL oRegistro.Eof
' Ejemplo: oSubFuncion.Add("0101","Descripción del Catalogo","01");
Genera_OptionCollection = Genera_OptionCollection &_
oCollection & ".Add(" & Comilla & oRegistro("Child")& Comilla & "," &_
Comilla & oRegistro("ChildCaption")& Comilla & "," &_
Comilla & oRegistro("Parent")& Comilla & ");" & vbCrlf
oRegistro.MoveNext
LOOP 
oRegistro.Close
oHandle.Close 
Genera_OptionCollection = Genera_OptionCollection & "</scr" & "ipt>" & vbCrlf
END FUNCTION
</script>
<HTML>
<HEAD>
<TITLE>Combos</TITLE>
<!--INCLUIR ESTE ARCHIVO, ES EL QUE HACE TODO!!! -->
<script language=Javascript src="optionex.js"></script>
</HEAD>
<BODY>
<% 
' -------------------------- Aqui armo la cadena que llena el segundo combo -----------------------------
CSqlString = "SELECT CSCClave||CSCCapitu Child,CSCDescri ChildCaption,CSCCapitu Parent " &_
"FROM SATCSubCapit " &_
"ORDER BY Parent,Child,ChildCaption"
Response.Write Genera_OptionCollection("oSubCapit",CSqlString)
' -------------------------- Aqui armo la cadena que llena el tercer combo -----------------------------
CSqlString = "SELECT CPAClave||CPaSubCap||CPaCapitu Child,CPaDescri ChildCaption,CPaSubCap||CPaCapitu Parent " &_
"FROM SATCPartida " &_
"ORDER BY Parent,Child,ChildCaption"
Response.Write Genera_OptionCollection("oPartida",CSqlString)
%>
<form name=forma>
<table>
<tr> 
<td align=right valign=top>Capitulo </td>
<td align=left valign=top> 
<SELECT name="PCapitulo" onchange="UpdateSelect('SubCap','forma',this.options[this.selectedIndex].value,oSubCapit);" style="width:400px;">
<%' Aqui construimos La Lista del primer combo
SET oHandle=Server.CreateObject("ADODB.Connection")
oHandle.Open "Oracle8"
CSqlString = "SELECT CCaClave,SUBSTR(CCaDescri,1,50) CCaDescri " &_
"FROM SaTCCapitulo " &_
"ORDER BY CCaClave"
SET oRegistroCa = oHandle.Execute(CSqlString)
oRegistroCa.MoveFirst
Do UNTIL oRegistroCa.EOF %>
<OPTION Value="<%=oRegistroCa("CCaClave")%>"> 
<%=oRegistroCa("CCaDescri")%> </option>
<% oRegistroCa.MoveNext 
LOOP
oRegistroCa.close 
%>
</SELECT> </td>
</tr>
<tr> 
<td align=right valign=top>Subcapitulo</td>
<td align=left valign=top><SELECT name="SubCap" onchange="UpdateSelect('Partida','forma',this.options[this.selectedIndex].value,oPartida);" style="width:400px;">
<option>[Seleccione un valor]</option>
</select></td> 
</tr>
<tr> 
<td align=right valign=top><font size="2" face="Arial, Helvetica, sans-serif"><strong>Partida</strong></font>:</td>
<td align=left valign=top><SELECT name="Partida" style="width:400px;">
<option>[Seleccione un valor]</option>
</select></td>
</tr>
</table>
</form>
</BODY>
</HTML>

Aqui pongo el archivo que se llama optionex.js, a este no le tienen que modificar NADA
var NS4 = (document.layers)?true:false;
var IE4 = (document.all)?true:false;
function _struct(child,childcaption,parent){
this.child = child;
this.childcaption = childcaption;
this.parent = parent;
}
function _addobject(child,childcaption,parent){
var obj = new _struct();
obj.child = child;
obj.childcaption = childcaption;
obj.parent = parent;
return(obj);
}
function insertEntry(child,childcaption,parent){
if(child.length > 0 ){ 
for(var i=0;i<this.length;i++)
if(this.items[i].child == child)
return; 
this.items[this.length++] = _addobject(child,childcaption,parent); 
}
}
function OptionCollection(){
this.length=0;
this.items = new Object();
this.Add=insertEntry
}
function clearSelect(oSelect){
var iCount=0;
if(!oSelect) return;
iCount = oSelect.options.length;
for(var i=0;i<iCount;i++){
if(IE4)
oSelect.options.remove(0);
else if(NS4)
oSelect.options[0]=null;
}
}
function agregaOpcion(oSelect,nIndice,cClave,cDescri){
elSelectOption = new Option();
elSelectOption.value = cClave;
elSelectOption.text = cDescri;
if(NS4) oSelect.options[nIndice] = elSelectOption;
else if(IE4) oSelect.options.add(elSelectOption,nIndice);
delete(elSelectOption);
}
function addOptions(oSelect,olist,parent){
var elOption;
var idxSelect=0; 
//check arguments.
if((!olist) || (!oSelect))return; 
if(parent.length <= 0) return;
//now looop through all the list items only entering relevant options.
clearSelect(oSelect); 
//add a blank list
// - elBlankOption = new Option();
// - elBlankOption.text = "";
// - if(NS4) oSelect.options[0] = elBlankOption
// - else if(IE4) oSelect.options.add(elBlankOption,0)
// - elBlankOption.value = "";
for(var i=0;i<olist.length;i++){ 
//only the child entries of the parent 
if(olist.items[i].parent == parent){
if(idxSelect==0){
agregaOpcion(oSelect,0,"","Seleccione un valor de la lista");
idxSelect++;
} 
elOption = new Option();
//now IE and NS have a different way to handle object creation.
if(NS4){
elOption.value = olist.items[i].child
elOption.text = olist.items[i].childcaption
oSelect.options[idxSelect] = elOption 
}else if(IE4){ 
elOption.value = olist.items[i].child
elOption.text = olist.items[i].childcaption
oSelect.options.add(elOption,idxSelect) 
} 
idxSelect++;
delete(elOption);
} 
}
if(oSelect.length<=0){
agregaOpcion(oSelect,0,"","No se encontraron valores coincidentes");
}
oSelect.selectedIndex = 0; 
}
function clearOptions(szSelect,szForm){
if(szSelect.length <= 0 || szForm.length <=0)
alert("error:clearOption must pass arguments"); 
if(IE4)
clearSelect(document.all.item(szSelect));
else if(NS4)
clearSelect(eval('document.' + szForm + '.' + szSelect));
}
function listAllOptions(szSelect,szForm,olist){
var elOption;
var idxSelect=0;
var oSelect = new Object();
//check arguments.
if(!olist)return; 
if(IE4)
oSelect = document.all.item(szSelect);
else if(NS4)
oSelect = eval('document.' + szForm + '.' + szSelect);
if(!oSelect)return; 
//now looop through all the list items entering all
clearSelect(oSelect);
for(var i=0;i<olist.length;i++){ 
elOption = new Option();
//now IE and NS have a different way to handle object creation.
if(NS4){ 
elOption.value = olist.items[i].child
elOption.text = olist.items[i].childcaption
oSelect.options[idxSelect] = elOption 
}else if(IE4){ 
elOption.value = olist.items[i].child
elOption.text = olist.items[i].childcaption
oSelect.options.add(elOption,idxSelect) 
} 
idxSelect++;
delete(elOption); 
} 
}
function UpdateSelect(szSelect,szForm,szParent,olist){
if(IE4)
addOptions(document.all.item(szSelect),olist,szParent);
else if(NS4)
addOptions(eval('document.' + szForm + '.' + szSelect),olist,szParent);
}
 
 
------------------------------
Otra cosa y muy importante es que el arreglo debe ser unico, por ejemplo:
Esto seria incorrecto, ya que hay dos 01, aunque provengan de padres diferentes
oSubCapit.Add("01","SERVICIOS PERSONALES","1");
oSubCapit.Add("01","SERVICIOS PERSONALES","2");
Esto seria lo correcto, concatenarle al hijo la clave del padre:
oSubCapit.Add("011","SERVICIOS PERSONALES","1");
oSubCapit.Add("012","SERVICIOS PERSONALES","2");
y asi ya se hace unico
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 22:29.