Foros del Web » Programando para Internet » Javascript »

problema con listas múltiples

Estas en el tema de problema con listas múltiples en el foro de Javascript en Foros del Web. Hola, tengo el siguiente problema: Tengo en una ventana padre con un select-multiple. Desde esta ventana, llamo a otra ventana hija, desde la cual, deseo ...
  #1 (permalink)  
Antiguo 12/05/2005, 08:49
 
Fecha de Ingreso: febrero-2005
Mensajes: 13
Antigüedad: 19 años, 2 meses
Puntos: 0
problema con listas múltiples

Hola, tengo el siguiente problema:
Tengo en una ventana padre con un select-multiple. Desde esta ventana, llamo a otra ventana hija, desde la cual, deseo añadir elementos al select-multiple de la ventana padre. El problema es que cuando intento añadir el elemento, me sale el error "El sevidor lanzó una excepción" y no se añade nada.

Mi código para intentar añadir el elemento es el siguiente:

var texto="text";
var longitud = window.parent.opener.document.form1.lista.options. length;
var option_nueva = new Option(texto);
window.parent.opener.document.form1.lista.options[longitud] = option_nueva

¿Alguien podría ayudarme? GRACIAS
  #2 (permalink)  
Antiguo 12/05/2005, 15:51
 
Fecha de Ingreso: octubre-2004
Ubicación: España
Mensajes: 894
Antigüedad: 19 años, 6 meses
Puntos: 3
Hola, Juan
a priori, creo que sobra "parent". window.opener debe ser la ref.correcta
__________________
Angel :cool:
  #3 (permalink)  
Antiguo 13/05/2005, 00:51
 
Fecha de Ingreso: febrero-2005
Mensajes: 13
Antigüedad: 19 años, 2 meses
Puntos: 0
Mensaje no se ha solucionado

He cambiado window.parent.opener.... por window.opener..... y sigue dándome el mismo error.
Lo curioso es que el código siguiente agrega una opción a la lista sin ningún problema, eso sí, lo agrega si estoy en la misma página, por lo tanto creo que el problema debe estar en añadir la opción desde una ventana hija. También es curioso que el código que falla en IExplorer, funciona en Mozilla:

Este es el código que funciona si se llama desde la misma página donde esta el select:

var longitud = lista.options.length;
valor = "texto";
var option_nueva = new Option(valor);
lista.options[longitud]= option_nueva;

Un saludo y gracias.
  #4 (permalink)  
Antiguo 13/05/2005, 11:50
 
Fecha de Ingreso: octubre-2004
Ubicación: España
Mensajes: 894
Antigüedad: 19 años, 6 meses
Puntos: 3
HOla de nuevo
No se me ocurre qué puede pasar, como no sea que no reconoce el formulario. Prueba usando
Código PHP:
var longitud window.opener.document.[COLOR=Red]forms['form1'][/COLOR].lista.optionslength 
¿No tendrás marcos (frames) en la página padre, verdad?
__________________
Angel :cool:
  #5 (permalink)  
Antiguo 16/05/2005, 01:22
 
Fecha de Ingreso: febrero-2005
Mensajes: 13
Antigüedad: 19 años, 2 meses
Puntos: 0
listas múltiples (código)

Sigue sin funcionarme. No se que es lo que puede pasar.
Paso el código, para ver si alguien tiene idea de cual es el error:

Código de la ventana Principal:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>Documento sin t&iacute;tulo</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
</head>
<script language="JavaScript" type="text/JavaScript">



function xShowModalDialog(sURL)
{
modalWin=window.open(String(sURL),"","height=150,w idth=300,top=250,left=300");
}
function Rellenar(lista,valor,texto){
var i=0;
var enc=false;
var valor;

var longitud = lista.options.length;
valor = texto + longitud;
var option_nueva = new Option(valor);
lista.options[longitud]= option_nueva;
}
</script>
<body onLoad="form1.modal.focus()">
<form name="form1" method="post" action="">
<select name="lista" id="lista" size="5" multiple>
</select>
<input name="rellena" type="button" id="rellena" value="Rellena Lista" onClick="Rellenar(lista,'valor','texto')" >
<input name="modal" type="button" id="modal" value="modal" onClick="xShowModalDialog('ventmodal.htm');">
</form>
</body>
</html>


Código de la ventana hija (modal):


<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>Documento sin t&iacute;tulo</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
</head>
<script language="JavaScript" type="text/JavaScript">
function aniade(arg)
{
var longitud = window.opener.document.form1.lista.options. length;
var option_nueva = new Option("texto","valor");
window.opener.document.form1.lista.options[longitud] = option_nueva;

}
function cierra()
{
window.close();
}
</script>

<!-- <body onUnload="pasaParametro(textfield)"> -->
<body onLoad="form1.Cerrar.focus()">
<form name="form1" method="post" action="">
<p>&nbsp; </p>
<p> Rellena la lista de la ventana padre
<input name="aniadir" type="button" id="aniadir" onClick="aniade(Array('cajaTexto'))" value="Añadir">
</p>
<p>&nbsp; </p>
<p>
<input name="Cerrar" type="button" id="Cerrar" onClick="cierra()" value="Cerrar">
</p>
<p>&nbsp;</p></form>
</body>
</html>
  #6 (permalink)  
Antiguo 17/05/2005, 14:07
 
Fecha de Ingreso: octubre-2004
Ubicación: España
Mensajes: 894
Antigüedad: 19 años, 6 meses
Puntos: 3
Buenas
He probado tu código, y funciona bien en Firefox pero no en IE.
No encuentro el problema, pero está en el momento de aplicar la nueva opción: la crea pero no pasa de la línea
Código:
window.opener.document.forms['form1'].lista.options[longitud] = option_nueva;
Leo en la web que IE5 tenía ciertos problemas, quizás sigan en IE6:
Cita:
1. Generating options in another frame or window doesn't work. Put the script in the page that contains the select.
...
3. Generating options from a popup window may crash any Explorer Windows.
Eso lo explicaría.
Visto esto, he pensado en hacer que sea un script de la página padre el que añada la opción, y resulta que ya tenías una función para ello, así que la idea es pasarle los parámetros desde la ventana hija. Así funciona, aunque no sé si te servirá:
Código:
function aniade(arg)
{
var laLista = window.opener.document.forms['form1'].lista;
window.opener.Rellenar(laLista,"texto","valor");
}
He usado la sintaxis
document.forms['form1'].lista
pues es más correcta que
form1.lista
aunque ese no era el problema.
Por otra parte, creo que tienes alternado el orden "valor","texto", en un sitio y otro están de modo opuesto.
Otras cosillas que debes corregir:
Código:
function Rellenar(lista,valor,texto){
var i=0;
var enc=false;
//var valor;
        ...etc...
"valor" es el parámetro que le llega a la función, no debes inicializarlo.
Código:
<body onLoad="forms['form1'].modal.focus()">
Código:
onClick="Rellenar(this.form.lista,'valor','texto')"
Código:
<body onLoad="document.forms['form1'].Cerrar.focus()">
¡Suerte!
__________________
Angel :cool:
  #7 (permalink)  
Antiguo 18/05/2005, 09:04
 
Fecha de Ingreso: febrero-2005
Mensajes: 13
Antigüedad: 19 años, 2 meses
Puntos: 0
ya esta solucionado

al final lo he solucionado así:

oOption = window.opener.document.createElement("OPTION");
lista.options.add(oOption);
oOption.value = valor;

el problema es que la opcion hay que crearla en la ventana padre, es decir,
oOption = document.createElement("OPTION"); no es válido. También he usado otra forma para añadirlos (lista.options.add(oOption);)

Gracias de todas formas.
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 04:37.