listas desplegables condicionadas

13/01/2005 - 21:42 por Ignacio Betancor | Informe spam
Hola a todos

estoy intentando hacer un formulario donde con listas despeglabes eligas

familia

subfamilia

articulo

en donde solo aparecieran los subfamilias correspondientes a la familia
elegida,una vez elegida familia/subfamilia que aparecieran los articulos
solo pertenecientes a dicha familia/subfamilia,...

pero no he podido, en visual foxpro era metiendo controles en la
seleccion y condiciones del select y hacer refresh del formulario cada vez
que se hacia la selección, pero claro en asp solo lo he podido hacer con
formularios encadenados no queda muy operativo ni funcional, alguna
orientación,.

muchas gracias de antemano

Preguntas similare

Leer las respuestas

#1 Sandra y María Claudia
13/01/2005 - 22:13 | Informe spam
Hola Ignacio:
Te copio la rutina que uso para anidar desde 2 hasta 3 niveles.

Este es el código HTML-ASP que uso

<form name="elementos" action="test.asp">
<select name="categorias" size="1" onChange="reInitOptions()"
style="color: Black; font: normal x-small Arial;">
<option selected value="">Seleccione una Categoría</option>
<%
Temp="Select * From Categorias Order By Nombre"
Tabla1.Open Temp, Conexion
While Not Tabla1.EOF
%>
<option
value="<%=Tabla1.Fields("codigo")%>"><%=Tabla1.Fields("nombre")%></option>
<%
Tabla1.MoveNext
Wend
Tabla1.Close
%>
</select>
<br>
<script language="javascript">
var pause = false;
var style1 = document.elementos.categorias.options[0].text;
document.write("<select name='subcategorias' size='1'
onChange='reInitOptions1()' style='color: Black; font: normal x-small
Arial;'><option selected>Seleccione una sub-categoria</option>");
InitOptions();
document.write("<\/select>");
</script>
<br>
<script language="javascript">
var pause = false;
var style2 = document.elementos.subcategorias.options[0].text;
document.write("<select name='clases' size='1' style='color: Black;
font: normal x-small Arial;'><option selected>Seleccione una
clase</option>");
InitOptions1();
document.write("<\/select>");
</script>
</form>

Este es el código JavaScript correspondiente (obviamente va antes del código
anterior)

<script>
function fixSelect(val)
{
if (!pause)
{document.write("<option>"+val);}
else
{
var gr = document.elementos.subcategorias;
var valOption = new Option(val);
var valLen = gr.length;
gr.options[valLen] = valOption;
}
}

function fixSelect1(val)
{
if (!pause)
{document.write("<option>"+val);}
else
{
var gr = document.elementos.clases;
var valOption = new Option(val);
var valLen = gr.length;
gr.options[valLen] = valOption;
}
}

function InitOptions()
{
<%
Temp="Select * From Categorias Order By Nombre"
Tabla1.Open Temp, Conexion
While Not Tabla1.EOF
%>
if (style1=="<%= Tabla1.Fields("nombre") %>")
{
fixSelect("Seleccione una sub-categoria");
<%
Temp2="Select * From SubCategorias Where cod_categoria='" &
Tabla1.Fields("codigo") & "' Order By Nombre"
Tabla2.Open Temp2, Conexion
While Not Tabla2.EOF
%>
fixSelect("<%= Tabla2.Fields("nombre") %>");
<%
Tabla2.MoveNext
Wend
Tabla2.Close
Response.Write("}")
Tabla1.MoveNext
Wend
Tabla1.Close
%>
}

function InitOptions1()
{
<%
Temp="Select * From Categorias Order By Nombre"
Tabla1.Open Temp, Conexion
While Not Tabla1.EOF
Temp2="Select * From SubCategorias Where cod_categoria='" &
Tabla1.Fields("codigo") & "' Order By Nombre"
Tabla2.Open Temp2, Conexion
While Not Tabla2.EOF
%>
if (style2=="<%= Tabla2.Fields("nombre") %>")
{
fixSelect1("Seleccione una clase");
<%
Temp3="Select * From Clases Where cod_categoria='" &
Tabla1.Fields("codigo") & "' And cod_subcategoria='" &
Tabla2.Fields("cod_subcategoria") & "' Order By Nombre"
Tabla3.Open Temp3, Conexion
While Not Tabla3.EOF
%>
fixSelect1("<%= Tabla3.Fields("nombre") %>");
<%
Tabla3.MoveNext
Wend
Tabla3.Close
Response.Write("}")
Tabla2.MoveNext
Wend
Tabla2.Close
Tabla1.MoveNext
Wend
Tabla1.Close
%>
}

function reInitOptions()
{
var val = document.elementos.categorias;
var gr = document.elementos.subcategorias;
style1 = val.options[val.selectedIndex].text;
for (i=gr.length;i>0;i--)
{gr.options[0] = null;}
pause = true;
InitOptions();
gr.options[0].selected = true;
return false;
}

function reInitOptions1()
{
var val = document.elementos.subcategorias;
var gr = document.elementos.clases;
style2 = val.options[val.selectedIndex].text;
for (i=gr.length;i>0;i--)
{gr.options[0] = null;}
pause = true;
InitOptions1();
gr.options[0].selected = true;
return false;
}
</script>

Ojalá te sea útil

Suerte

____________________________________________________________________________________
SyMC
Suerte es la ayuda que te da la vida... Destino es lo que haces con esta
ayuda
Comparte con los demás, es la mejor manera de crecer y quererse más
Respuesta Responder a este mensaje
#2 Ignacio Betancor
18/01/2005 - 21:49 | Informe spam
Hola Sandra y Maria Claudia

ante todo muchisimas gracias por vuestra rutina, la he estado probando y
me da errores, la monte igual que como indicabais en el post, y le añadi
la conexion a mi base de datos,... cambie los nombres de los campos,...y el
resultado es el siguiente

<script>
function fixSelect(val)
{
if (!pause)
{document.write("<option>"+val);}
else
{
var gr = document.elementos.subcategorias;
var valOption = new Option(val);
var valLen = gr.length;
gr.options[valLen] = valOption;
}
}

function fixSelect1(val)
{
if (!pause)
{document.write("<option>"+val);}
else
{
var gr = document.elementos.clases;
var valOption = new Option(val);
var valLen = gr.length;
gr.options[valLen] = valOption;
}
}

function InitOptions()
{
<%

Dim Conexion, rs
set oConn=Server.CreateObject("ADODB.Connection")
set rs=Server.CreateObject("ADODB.Recordset")
Conexion.Open "Driver={Microsoft Visual FoxPro
Driver};SourceTypeÛc;SourceDB=c:\inetpub\wwwroot\difersa\vtasdb\webalba.db
c;exclusive=no"

Temp="Select * From familias Order By Nofami"
Tabla1.Open Temp, Conexion
While Not Tabla1.EOF
%>
if (style1=="<%= Tabla1.Fields("nombre") %>")
{
fixSelect("Seleccione una subfamilia");
<%
Temp2="Select * From Subfamilia Where familia='" &
Tabla1.Fields("familia") & "' Order By Nombre"
Tabla2.Open Temp2, Conexion
While Not Tabla2.EOF
%>
fixSelect("<%= Tabla2.Fields("nombre") %>");
<%
Tabla2.MoveNext
Wend
Tabla2.Close
Response.Write("}")
Tabla1.MoveNext
Wend
Tabla1.Close
%>
}

function InitOptions1()
{
<%
Temp="Select * From familias Order By familia"
Tabla1.Open Temp, Conexion
While Not Tabla1.EOF
Temp2="Select * From Subfamilia Where familia='" &
Tabla1.Fields("familia")
Tabla2.Open Temp2, Conexion
While Not Tabla2.EOF
%>
if (style2=="<%= Tabla2.Fields("nombre") %>")
{
fixSelect1("Seleccione una clase");
<%
Temp3="Select * From articulo Where familia='" &Tabla1.Fields("familia")
& "' And cod_subcfamilia='" &Tabla2.Fields("subfamilia") & "' Order By
descri"
Tabla3.Open Temp3, Conexion
While Not Tabla3.EOF
%>
fixSelect1("<%= Tabla3.Fields("descri") %>");
<%
Tabla3.MoveNext
Wend
Tabla3.Close
Response.Write("}")
Tabla2.MoveNext
Wend
Tabla2.Close
Tabla1.MoveNext
Wend
Tabla1.Close
%>
}

function reInitOptions()
{
var val = document.elementos.categorias;
var gr = document.elementos.subcategorias;
style1 = val.options[val.selectedIndex].text;
for (i=gr.length;i>0;i--)
{gr.options[0] = null;}
pause = true;
InitOptions();
gr.options[0].selected = true;
return false;
}

function reInitOptions1()
{
var val = document.elementos.subcategorias;
var gr = document.elementos.clases;
style2 = val.options[val.selectedIndex].text;
for (i=gr.length;i>0;i--)
{gr.options[0] = null;}
pause = true;
InitOptions1();
gr.options[0].selected = true;
return false;
}
</script>
<form name="elementos" action="../test.asp">
<select name="categorias" size="1" onChange="reInitOptions()"
style="color: Black; font: normal x-small Arial;">
<option selected value="">Seleccione una Categoría</option>
<%
Temp="Select * From familias Order By familia"
Tabla1.Open Temp, Conexion
While Not Tabla1.EOF
%>
<option
value="<%=Tabla1.Fields("familia")%>"><%=Tabla1.Fields("nofami")%></option>
<%
Tabla1.MoveNext
Wend
Tabla1.Close
%>
</select>
<br>
<script language="javascript">
var pause = false;
var style1 = document.elementos.categorias.options[0].text;
document.write("<select name='subcategorias' size='1'
onChange='reInitOptions1()' style='color: Black; font: normal x-small
Arial;'><option selected>Seleccione una sub-categoria</option>");
InitOptions();
document.write("<\/select>");
</script>
<br>
<script language="javascript">
var pause = false;
var style2 = document.elementos.subcategorias.options[0].text;
document.write("<select name='clases' size='1' style='color: Black;
font: normal x-small Arial;'><option selected>Seleccione una
clase</option>");
InitOptions1();
document.write("<\/select>");
</script>
</form>

pero no me funciona,que estoy haciendo mal ???? hay un aplicativo muy
sencillo en www.aspfacil.com pero solo va a dos niveles, pero cuando
necesitas mas como hacerlo..un saludito desde Canarias (España)


"Sandra y María Claudia" escribió en el mensaje
news:#GhiBTb#
Hola Ignacio:
Te copio la rutina que uso para anidar desde 2 hasta 3 niveles.

Este es el código HTML-ASP que uso

<form name="elementos" action="test.asp">
<select name="categorias" size="1" onChange="reInitOptions()"
style="color: Black; font: normal x-small Arial;">
<option selected value="">Seleccione una Categoría</option>
<%
Temp="Select * From Categorias Order By Nombre"
Tabla1.Open Temp, Conexion
While Not Tabla1.EOF
%>
<option
value="<%=Tabla1.Fields("codigo")%>"><%=Tabla1.Fields("nombre")%></option>
<%
Tabla1.MoveNext
Wend
Tabla1.Close
%>
</select>
<br>
<script language="javascript">
var pause = false;
var style1 = document.elementos.categorias.options[0].text;
document.write("<select name='subcategorias' size='1'
onChange='reInitOptions1()' style='color: Black; font: normal x-small
Arial;'><option selected>Seleccione una sub-categoria</option>");
InitOptions();
document.write("<\/select>");
</script>
<br>
<script language="javascript">
var pause = false;
var style2 = document.elementos.subcategorias.options[0].text;
document.write("<select name='clases' size='1' style='color: Black;
font: normal x-small Arial;'><option selected>Seleccione una
clase</option>");
InitOptions1();
document.write("<\/select>");
</script>
</form>

Este es el código JavaScript correspondiente (obviamente va antes del


código
anterior)

<script>
function fixSelect(val)
{
if (!pause)
{document.write("<option>"+val);}
else
{
var gr = document.elementos.subcategorias;
var valOption = new Option(val);
var valLen = gr.length;
gr.options[valLen] = valOption;
}
}

function fixSelect1(val)
{
if (!pause)
{document.write("<option>"+val);}
else
{
var gr = document.elementos.clases;
var valOption = new Option(val);
var valLen = gr.length;
gr.options[valLen] = valOption;
}
}

function InitOptions()
{
<%
Temp="Select * From Categorias Order By Nombre"
Tabla1.Open Temp, Conexion
While Not Tabla1.EOF
%>
if (style1=="<%= Tabla1.Fields("nombre") %>")
{
fixSelect("Seleccione una sub-categoria");
<%
Temp2="Select * From SubCategorias Where cod_categoria='" &
Tabla1.Fields("codigo") & "' Order By Nombre"
Tabla2.Open Temp2, Conexion
While Not Tabla2.EOF
%>
fixSelect("<%= Tabla2.Fields("nombre") %>");
<%
Tabla2.MoveNext
Wend
Tabla2.Close
Response.Write("}")
Tabla1.MoveNext
Wend
Tabla1.Close
%>
}

function InitOptions1()
{
<%
Temp="Select * From Categorias Order By Nombre"
Tabla1.Open Temp, Conexion
While Not Tabla1.EOF
Temp2="Select * From SubCategorias Where cod_categoria='" &
Tabla1.Fields("codigo") & "' Order By Nombre"
Tabla2.Open Temp2, Conexion
While Not Tabla2.EOF
%>
if (style2=="<%= Tabla2.Fields("nombre") %>")
{
fixSelect1("Seleccione una clase");
<%
Temp3="Select * From Clases Where cod_categoria='" &
Tabla1.Fields("codigo") & "' And cod_subcategoria='" &
Tabla2.Fields("cod_subcategoria") & "' Order By Nombre"
Tabla3.Open Temp3, Conexion
While Not Tabla3.EOF
%>
fixSelect1("<%= Tabla3.Fields("nombre") %>");
<%
Tabla3.MoveNext
Wend
Tabla3.Close
Response.Write("}")
Tabla2.MoveNext
Wend
Tabla2.Close
Tabla1.MoveNext
Wend
Tabla1.Close
%>
}

function reInitOptions()
{
var val = document.elementos.categorias;
var gr = document.elementos.subcategorias;
style1 = val.options[val.selectedIndex].text;
for (i=gr.length;i>0;i--)
{gr.options[0] = null;}
pause = true;
InitOptions();
gr.options[0].selected = true;
return false;
}

function reInitOptions1()
{
var val = document.elementos.subcategorias;
var gr = document.elementos.clases;
style2 = val.options[val.selectedIndex].text;
for (i=gr.length;i>0;i--)
{gr.options[0] = null;}
pause = true;
InitOptions1();
gr.options[0].selected = true;
return false;
}
</script>

Ojalá te sea útil

Suerte




____________________________________________________________________________
________
SyMC
Suerte es la ayuda que te da la vida... Destino es lo que haces con esta
ayuda
Comparte con los demás, es la mejor manera de crecer y quererse más



email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida