Foros del Web » Programando para Internet » Javascript »

Error en combo.!

Estas en el tema de Error en combo.! en el foro de Javascript en Foros del Web. Tengo el siguinte código de listas dependientes, todo ok. acá pongo el código que dicho sea de paso yo ya lo había expuesto en post ...
  #1 (permalink)  
Antiguo 29/07/2003, 22:02
Avatar de biblio  
Fecha de Ingreso: enero-2002
Ubicación: Urano
Mensajes: 577
Antigüedad: 22 años, 3 meses
Puntos: 0
Error en combo.!

Tengo el siguinte código de listas dependientes, todo ok. acá pongo el código que dicho sea de paso yo ya lo había expuesto en post anterior, y no me percaté del error que quiero me ayuden solucionar. Pongo el código.

Código:
<HTML>
<HEAD>	
<FORM NAME="Listas" METHOD="POST" ACTION="receive.asp">
Categorías
<SELECT NAME="Categorias" SIZE="1" 
  OnChange="ComponerLista (document.forms.Listas.Categorias[selectedIndex].value);">

	<OPTION VALUE="1" SELECTED>Libros</OPTION>
	<OPTION VALUE="2">Discos</OPTION>
	<OPTION VALUE="3">Websites</OPTION>
	<OPTION VALUE="4">Otros..</OPTION>
</SELECT>
Productos
<SELECT NAME="Productos" SIZE="1">
</SELECT>
<INPUT TYPE="submit">
</FORM>
<SCRIPT LANGUAGE="Javascript">
<!--
function Tupla ( campo1, campo2 )
{
	this.campo1 = campo1;
	this.campo2 = campo2;
}
var opciones1 = new Array();

opciones1[0]=new Tupla("Dracula","1");
opciones1[1]=new Tupla("Don Quijote","2");
opciones1[2]=new Tupla("Fantasmas","3");
var opciones2 = new Array();
opciones2[0]=new Tupla("California Dreamin'","4");
opciones2[1]=new Tupla("Led Zeppelin IV","5");
opciones2[2]=new Tupla("Nos sobran los motivos","6");
opciones2[3]=new Tupla("Oracle","7");
var opciones3 = new Array();
opciones3[0]=new Tupla("Hotscript","8");
opciones3[1]=new Tupla("La Cueva de Smaug","9");
opciones3[2]=new Tupla("Maestros del Web","10");
opciones3[3]=new Tupla("4Guys From Rolla","11");
opciones3[4]=new Tupla("Web Developers Virtual Library","12");
opciones3[5]=new Tupla("Disney OffLine","13");
var contador;

function ComponerLista ( array ) {
BorrarLista();
array = eval("opciones" + array);

for (contador=0; contador<array.length; contador++) 
{
var optionObj = new Option( array[contador].campo1, array[contador].campo2 );

Listas.Productos.options[contador] = optionObj;
} 
} 

function BorrarLista() {

	Listas.Productos.length=0;
}

//Inicializamos
ComponerLista (1);

-->
</SCRIPT>
</FORM>
</BODY> </HTML>
Ese es el dichoso código, al seleccionar Otros.. del combo, salta el error, es porque para esa opción no ha sido definido o creado el arreglo correspondiente.

Entonces de que manera puedo manejar el error, lo he intentado de muchas formas sin éxito, espero que uds puedan ayudarme a salvar ese error. No me vayan a decir que ponga datos para Otros.., que yo quiero manejarlo ese error. quiero respuestas coherentes, novatos abstenerse.

Gracias y saludos.

Última edición por biblio; 30/07/2003 a las 10:31
  #2 (permalink)  
Antiguo 30/07/2003, 08:54
Avatar de Beakdan  
Fecha de Ingreso: diciembre-2001
Ubicación: Monterrey, Nuevo León
Mensajes: 433
Antigüedad: 22 años, 4 meses
Puntos: 7
Cita:
novatos abstenerse
¿No crees qué eso es una grosería?
¿Por qué limitar la libre expresión? Al fin de cuentas, si la respuesta no te sirve, no la usas, y asunto acabado.

Yo dudaba en poner una respuesta, ya que nunca me he sentido "experto" pero aquí tienes:

Dices que quieres manejar el error. Entonces, usa el evento "onerror":

Código:
window.onerror = controlarError;

function controlarError(msgError, urlArchivo, numLinea) {
	alert("Error: " + msgError +
	"\nArchivo: " + urlArchivo +
	"\nLínea: " + numLinea);
	return true;
}
En la anterior función, reemplacé el mensaje de error que te muestra la ventana, por uno personalizado en un alert. Obviamente, tu tendrías que hacer lo que te plazca con las tres variables disponibles para la función. Quitando el alert, dejarás de recibir mensajes de error en tiempo de ejecución, pero desde luego, eso no significa que no ocurran.

¿qué no es eso lo que buscabas?

Entonces, simplemente modifica tu función "ComponerLista" para que no haga nada con la opción otros. Suponiendo, que la lista "Categorias" pudiera modificarse para tener más opciones, y ya que la opción otros suele ser la última de la lista, modifiqué tu función para que con la última opción no haga nada más que poner en blanco la lista "Productos".

Código:
function ComponerLista ( array ) {
   BorrarLista();
   if(parseInt(array) == (Listas.Categorias.length)) return;
   array = eval("opciones" + array);
   for (contador=0; contador<array.length; contador++){
      var optionObj = new Option( array[contador].campo1, array[contador].campo2 );
      Listas.Productos.options[contador] = optionObj;
   }
}
En mi opinión de novato, debería haber un campo de texto disponible en lugar de la lista cuando la opción "Otros" sea elegida. Pero esa es sólo mi opinión.
  #3 (permalink)  
Antiguo 30/07/2003, 09:13
Avatar de biblio  
Fecha de Ingreso: enero-2002
Ubicación: Urano
Mensajes: 577
Antigüedad: 22 años, 3 meses
Puntos: 0
Mi intencion no es ofender, en todoc caso, quito lo dicho, y gracias por responder, lo probaré en este momento, y te comento el resultado.

Saludos
  #4 (permalink)  
Antiguo 30/07/2003, 09:44
Avatar de caricatos
Moderador
 
Fecha de Ingreso: abril-2002
Ubicación: Torremolinos (Málaga)
Mensajes: 19.607
Antigüedad: 22 años
Puntos: 1284
Hola biblio:

Coincido con Beakdan (hola ) respecto a la discriminación de los novatos... yo he sido novato en su momento, y me equivocaba muchísimo (más que ahora -creo), pero con los errores se aprende mucho y creo que todos queremos aprender...

Bueno, no es mi intención dar tirones de oreja, sino intentar orientarte en tu problema...

Te comento lo que suelo hacer cuando en un select pongo "elija una opción" o algo parecido.

Averiguo cuál es el elemento seleccionado y hago un tratamiento especial (en el caso de "elija una opción" el tratamiento es no hacerle caso)

Sabiendo que hay una opción que debe tratarse de otra manera, la función la "condiciono":

if (formulario...selectedIndez > 0) acción();

En tu caso, el selectedIndex sería 3, y la línea sería:

OnChange="if (this.selectedIndex != 3) ComponerLista (document.forms.Listas.Categorias[selectedIndex].value);"

Y si has implementado el tratamiento de "otros", ponerle un else...

Saludos
  #5 (permalink)  
Antiguo 30/07/2003, 10:01
Avatar de biblio  
Fecha de Ingreso: enero-2002
Ubicación: Urano
Mensajes: 577
Antigüedad: 22 años, 3 meses
Puntos: 0
Ya dije quito lo dicho, calmense muchachos, no es para tanto, porque no lo ven del lado positivo, así se erfozaran mas si son novatos, no creen?.

Les comento esto, no son datos espicificos los que quiero manejar como en este ejemplo, es en forma dinamica, puede ser que haya tres elementos del primer combo con el caso de Otros..., puesto que los datos van a ser llenados desde la base de datos, fijense una cosa, pongamos el caso Paises, con sus respectivas Ciudades o Provincias, yo tengo varios Paises que no tienen ciudades, entonces cuando suceda eso, no quiero que salte ese error. No voy a obligar a que llenen forzosamente cada Pais con su Ciudad.

Espero haber aclarado el panorama, como recien arranco, hoy soluciono ese error, con ayuda de ustedes porsupuesto.


Saludos.

Última edición por biblio; 30/07/2003 a las 10:03
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 08:36.