Foros del Web » Programando para Internet » Javascript »

opciones vacias en select

Estas en el tema de opciones vacias en select en el foro de Javascript en Foros del Web. buenas noches: no veo por que al generar las listas dependientes se generan unas lineas vacias previas a las opciones creadas para los diferentes temas, ...
  #1 (permalink)  
Antiguo 06/11/2008, 17:55
 
Fecha de Ingreso: julio-2002
Mensajes: 813
Antigüedad: 21 años, 8 meses
Puntos: 2
opciones vacias en select

buenas noches:

no veo por que al generar las listas dependientes se generan unas lineas vacias previas a las opciones creadas para los diferentes temas, segundo valor de licategoria.

<html>
<head>
<script type="text/JavaScript">
<!--

function elige(cual,donde)
{
var licategoria = new Array();
licategoria[0] = new Array("1","1","Cliente","");
licategoria[1] = new Array("2","1","Liderazgo","");
licategoria[2] = new Array("3","2","Plan 2007","");
licategoria[3] = new Array("4","2","Casuística","");
licategoria[4] = new Array("5","3","Estimación Objetiva","");
licategoria[5] = new Array("6","3","Estimación Directa","");
if(cual.selectedIndex != 0)
{
cual = eval(cual.value)
donde.length = 0;
for(m=0;m<licategoria.length;m++)
{
if(licategoria[m][1] == cual)
{
var nuevaOpcion = new Option(licategoria[m][2]);
donde.options[m] = nuevaOpcion;
donde.options[m].value = licategoria[m][0];
}
}
}
}


//-->
</script>

</head>

<body>

<form id="formulario" name="prestoca" method="post" action="/contenido/documentoIN.asp">

<label for="documento">Documento</label>
<select name="documento" id="documento">
<option value="">[Elige un Documento]</option>
<option value="1">noticias</option>
<option value="2">artículos</option>
<option value="3">editoriales</option>
<option value="4">manuales</option>
<option value="5">enlaces</option>
</select>
<br />
<label for="tema">Temática</label>
<select name="tema" id="tema" onChange="javascript:elige(this,this.form.categori a);">
<option value="" selected>[Elige una Temática]</option>
<option value="1">Calidad</option>
<option value="2">Contabilidad</option>
<option value="3">Fiscalidad</option>
<option value="4">Software ERP</option>
<option value="5">Actualidad</option>
</select>
<br />
<label for="categoria">Categoría</label>
<select name="categoria" id="categoria">
<option value="" selected>[Elige una Categoría]</option>
</select>
<br />
</fieldset>
<br />
</form>


</body>

</html>
  #2 (permalink)  
Antiguo 06/11/2008, 21:26
Avatar de David
Moderador
 
Fecha de Ingreso: abril-2005
Ubicación: In this planet
Mensajes: 15.720
Antigüedad: 19 años
Puntos: 839
Respuesta: opciones vacias en select

Es que si te fijas, estás agregando en la posición [m], que es el contador del bucle, mientras que algunos elementos no se agregan, por lo que al agregar dejará tantos espacios en blanco como veces se ha pasado por el bucle.

La solución es en vez de agregar en la posición m agregar según el tamaño de la lista, o sea, donde.length, o directamente con un contador que se incremente cada vez que se agregue un elemento.
__________________
Por favor, antes de preguntar, revisa la Guía para realizar preguntas.
  #3 (permalink)  
Antiguo 07/11/2008, 04:45
 
Fecha de Ingreso: julio-2002
Mensajes: 813
Antigüedad: 21 años, 8 meses
Puntos: 2
Respuesta: opciones vacias en select

pues no lo veo

si, el for recorre todo el array licategoria,
pero con if(licategoria[m][1] == cual) solo creo las opciones cuando se cumple la condición

saludos,
jose carlos.
  #4 (permalink)  
Antiguo 07/11/2008, 05:38
Avatar de David
Moderador
 
Fecha de Ingreso: abril-2005
Ubicación: In this planet
Mensajes: 15.720
Antigüedad: 19 años
Puntos: 839
Respuesta: opciones vacias en select

Sí, esa parte está bien, esto está mal:
Código:
donde.options[m] = nuevaOpcion;
donde.options[m].value = licategoria[m][0];
Debería ser el último elemento y no m.
__________________
Por favor, antes de preguntar, revisa la Guía para realizar preguntas.
  #5 (permalink)  
Antiguo 07/11/2008, 05:44
 
Fecha de Ingreso: julio-2002
Mensajes: 813
Antigüedad: 21 años, 8 meses
Puntos: 2
Respuesta: opciones vacias en select

pero [m] en esa iteracción ya es el último elemento,
con el if(licatagoria[m][1] == cual)
solo se escribe la opción del select cuando se cumple la condición,

nada, q estoy ciego, no lo veo

un saludo,
jose carlos.
  #6 (permalink)  
Antiguo 07/11/2008, 05:50
 
Fecha de Ingreso: julio-2002
Mensajes: 813
Antigüedad: 21 años, 8 meses
Puntos: 2
Respuesta: opciones vacias en select

lo he resuelto:

if(cual.selectedIndex != 0)
{
cual = eval(cual.value)
donde.length = 0;
var contador = 0;
for(m=0;m<licategoria.length;m++)
{
if(licategoria[m][1] == cual)
{
var nuevaOpcion = new Option(licategoria[m][2]);
donde.options[contador] = nuevaOpcion;
donde.options[contador].value = licategoria[m][0];
contador++;
}
}
}

pero sigo sin verlo,

gracias
jose carlos
  #7 (permalink)  
Antiguo 07/11/2008, 05:55
Avatar de David
Moderador
 
Fecha de Ingreso: abril-2005
Ubicación: In this planet
Mensajes: 15.720
Antigüedad: 19 años
Puntos: 839
Respuesta: opciones vacias en select

Cita:
Iniciado por David el Grande Ver Mensaje
Es que si te fijas, estás agregando en la posición [m], que es el contador del bucle, mientras que algunos elementos no se agregan, por lo que al agregar dejará tantos espacios en blanco como veces se ha pasado por el bucle.
Es que m se va incrementando a cada paso del bucle, pero no todas las veces que se pasa agrega un elemento, por lo que cuando finalmente agrega ocurría que dejaba esos espacios en blanco.

Saludos .
__________________
Por favor, antes de preguntar, revisa la Guía para realizar preguntas.
  #8 (permalink)  
Antiguo 07/11/2008, 14:31
 
Fecha de Ingreso: julio-2002
Mensajes: 813
Antigüedad: 21 años, 8 meses
Puntos: 2
Respuesta: opciones vacias en select

vale, ya lo tengo claro,

no estaba teniendo en cuenta el array del select del arbol de la pagina.

gracias,
un saludo,
  #9 (permalink)  
Antiguo 08/11/2008, 22:06
 
Fecha de Ingreso: julio-2002
Mensajes: 813
Antigüedad: 21 años, 8 meses
Puntos: 2
Respuesta: opciones vacias en select

buenas noches,

una vez que envío el formulario he comprobado que el valor del select generado (categoria) como lista dependiente es "undefined"

y por muchas vueltas que le doy no encuentro donde está el problema,

un saludo,
josé carlos.
  #10 (permalink)  
Antiguo 08/11/2008, 22:19
Avatar de David
Moderador
 
Fecha de Ingreso: abril-2005
Ubicación: In this planet
Mensajes: 15.720
Antigüedad: 19 años
Puntos: 839
Pregunta Respuesta: opciones vacias en select

¿Puedo ver el código como lo tienes ahora?.
__________________
Por favor, antes de preguntar, revisa la Guía para realizar preguntas.
  #11 (permalink)  
Antiguo 09/11/2008, 14:58
 
Fecha de Ingreso: julio-2002
Mensajes: 813
Antigüedad: 21 años, 8 meses
Puntos: 2
Respuesta: opciones vacias en select

buenas noches:

function elige(cual,donde,campos)
{
var dbcategoria = "1,1,Cliente,,2,1,Liderazgo,,3,1,Personal,,4,1,Pro cesos,,5,1,Gestión,,6,1,Mejora Continua,,7,1,Análisis de Datos,,8,1,Proveedores,,9,2,Plan 2007,,10,2,Casos,,12,3,Estimación Objetiva - Módulos,,13,3,Sociedades,,14,3,Estimación Directa,,15,3,Comercio Minorista,,16,3,Agencias de Viajes,";
dbcategoria = dbcategoria.split(",");

var registro = 0;
var campo = 0;
var locategoria = new Array();
locategoria[registro] = new Array();

for(i=0;i<dbcategoria.length;i++)
{
locategoria[registro][campo] = dbcategoria[i];
if(campo==campos)
{
registro++;
locategoria[registro] = new Array();
campo=0;
}
campo++
}

if(cual.selectedIndex != 0)
{
cual = eval(cual.value);
donde.length = 0;
var contador = 0;
for(m=0;m<locategoria.length;m++)
{
if(locategoria[m][1] == cual)
{
var nuevaOpcion = new Option(locategoria[m][2]);
donde.options[contador] = nuevaOpcion;
donde.options[contador].value = locategoria[m][0];
contador++;
}
}
}
donde.disabled=false;
if(cual.selectedIndex == 0){donde.disabled=true}
}

<label for="documento">Documento</label>
<select name="documento" id="documento">
<option value="">[Elige un Documento]</option>
<option value="1">noticias</option>
<option value="2">artículos</option>
<option value="3">editoriales</option>
<option value="4">manuales</option>
<option value="5">enlaces</option>
</select>
<br />
<label for="tema">Temática</label>
<select name="tema" id="tema"
onChange="javascript:elige(this,this.form.categori a,4);">
<option value="">[Elige una Temática]</option>
<option value="1">Calidad</option>
<option value="2">Contabilidad</option>
<option value="3">Fiscalidad</option>
<option value="4">Software ERP</option>
<option value="5">Actualidad</option>
</select>
<br />
<label for="categoria">Categoría</label>
<select name="categoria" id="categoria" disabled>
<option value="">[Elige una Categoría]</option>
</select>


un saludo,
jose carlos.
  #12 (permalink)  
Antiguo 09/11/2008, 15:36
Avatar de David
Moderador
 
Fecha de Ingreso: abril-2005
Ubicación: In this planet
Mensajes: 15.720
Antigüedad: 19 años
Puntos: 839
Respuesta: opciones vacias en select

Es que hay un pequeño error en el bucle for que obtiene las categorías, y es que cuando pasas a una nueva categoría pasas la variable campo a 0, pero inmediatamente después se ejecuta el campo++ por lo que campo llega a ser 1, entonces el índice 0 del array nunca llega a asignarse. Deberías poner el campo++ en un else, y también en vez de 4 campos, poner solo 3 (ya que empieza desde 0).
__________________
Por favor, antes de preguntar, revisa la Guía para realizar preguntas.
  #13 (permalink)  
Antiguo 09/11/2008, 16:49
 
Fecha de Ingreso: julio-2002
Mensajes: 813
Antigüedad: 21 años, 8 meses
Puntos: 2
Respuesta: opciones vacias en select

ok,

gracias,

un saludo,
jose carlos
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 17:20.