Tremeeenda duda sobre uso de FOR

Tengo un tremeeendo problema con un código que estoy escribiendo...
(Esto recién aprendiendo y no logro ver porqué no me resulta...)
La idea es que tengo una página con tres radiobutton... A cada uno le asigono un valor para enviárselo a la función...
En la página, más abajo, tengo un select múltiple al que debo hacer que dependiendo del radiobutton que pinche, se seleccionen varios de sus items...
¿Se entiende la idea?
Acá va el código de la página:
<html>
<!-- Creation date: 07-05-2004 -->
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<script>
//largo se usa nombre.length
//determinar valor con nombre.options.value
//se selecciona con nombre.options.selected=true
var l=seleccion.length-1;
function sel(t);
{
for (var p=0;p<=l;p++);
{
if(seleccion.options

.value==t)
seleccion.options

.selected=true;
else
seleccion.options

.selected=false;
}
}
</script>
<title>Test 1</title>
</head>
<body bgcolor="ivory">
<table border="0" align="center" summary="" width="70%">
<tr>
<td>Categoría:<BR>
<input type="radio" name="radio1" onclick="sel(1);"> Vegetal<BR>
<input type="radio" name="radio1" onclick="sel(2);"> Animal<BR>
<input type="radio" name="radio1" onclick="sel(3);"> Insecto<BR></td>
<td></td>
</tr>
<tr>
<td><select size="7" name="seleccion" multiple>
<option value="1">Rosas</option>
<option value="2">Perro</option>
<option value="2">Gato</option>
<option value="3">Matapiojo</option>
<option value="2">Leon</option>
<option value="3">Caballo</option>
<option value="1">Clavel</option></td>
<td></td>
</tr>
</table>
</body>
</html>
No me funciona y no sé porqué... Si me puedes ayudar.. Estaré eteeernamente agradecido!

1 respuesta

Respuesta
1
Bienvenido al mundo de javascript.
Bueno, el error más grande es que pones ";" donde no deberías:
1.- Tras el nombre de la función.
2.- Tras el "for"
Ademas, la inicialización de "l" al length debería ejecutarse cuando la página ha cargado, porque si se ejecuta cuando lo haces tu, la página ha podido no cargarse y el objeto selección no estar presente.
Conviene también utilizar la etiqueta form para acceder a los objetos de manera más adecuada.
El código corregido y funcionando es este:
<html>
<!-- Creation date: 07-05-2004 -->
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<script>
//largo se usa nombre.length
//determinar valor con nombre.options.value
//se selecciona con nombre.options.selected=true
function inicializar(){
l=this.document.formulario.seleccion.length-1;
}
function sel(t)
{
for (var p=0;p<=l;p++)
{
if(this.document.formulario.seleccion.options

.value==t)
this.document.formulario.seleccion.options

.selected=true;
else
this.document.formulario.seleccion.options

.selected=false;
}
}
</script>
<title>Test 1</title>
</head>
<body bgcolor="ivory" onLoad="inicializar()">
<form name="formulario">
<table border="0" align="center" summary="" width="70%">
<tr>
<td>Categoría:<BR>
<input type="radio" name="radio1" onclick="sel(1);"> Vegetal<BR>
<input type="radio" name="radio1" onclick="sel(2);"> Animal<BR>
<input type="radio" name="radio1" onclick="sel(3);"> Insecto<BR></td>
<td></td>
</tr>
<tr>
<td><select size="7" name="seleccion" multiple>
<option value="1">Rosas</option>
<option value="2">Perro</option>
<option value="2">Gato</option>
<option value="3">Matapiojo</option>
<option value="2">Leon</option>
<option value="3">Caballo</option>
<option value="1">Clavel</option></td>
<td></td>
</tr>
</table>
</form>
</body>
</html>

Hola!
Gracias!... me has iluminado!
La verdad es que la página era una prueba para ver si me resultaba la función... por eso que no tenía todas las etiquetas (por ejemplo form)
De todas formas si me funcionó con una versión simplificada del script... lo dejé así:
function sel(t)
{
l=seleccion.length-1;
for (var p=0;p<=l;p++)
{
if(seleccion.options

.value==t)
seleccion.options

.selected=true;
else
seleccion.options

.selected=false;
}
}
Como me lo hiciste notar, el principal problema estaba en las comillas... y la posición en que tenía la variable para el length...
Gracias, mil gracias!

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas