AYUDA con select

Francisco
16 de Noviembre del 2004
Hola:

Estoy haciendo una página en la que tengo un formulario con un select, con valores recogidos de una tabla, ademas de input, radio, etc.

Doy la opción al usuario de que si no encuentra el valor que quiere en el select, accediendo a otra página (quiero que se abra en una segunda ventana del navegador), por ejemplo, lo inserte en la tabla de la cual se recogen los option del select.

En ese caso, los option ya no estarían actualizados, por lo que quiero que cuando eso ocurra, el select que tengo en la primera página, se actualice.

Una forma, habia pensado, es que se podría hacer algo del estilo como que cuando la ventana en la está la primera página vuelva a coger el foco, se actualice el select, aunque eso me parece que no es posible, no lo se.

También he pensado en que como la ventana donde esta el select tiene un name, desde la 2ª, a traves de este name, modificar los options del select.

Un problemilla a evitar, si fuera posible es que el usuario ya puede haber introducido valores en el resto del form, y lo suyo es que se mantuviera, aunque lo veo dificil.

Estoy haciendo pruebas, y lo que he conseguido hasta el momento es que desde la segunda ventana, accedo al length del select que esta en la primera ventana, al name, y a borrar los options que tiene, vaciándolo, pero luego, al añadir los que corresponden, no funciona.

El código con el que pretendo añadirlos es:

for(j=(miArray.length-1); j>=0; j--){
//en miArray estan los valores que forman el select
//Crear un objeto de tipo Option para el select
var opcion = new Option(miArray[j]);
//Le asignamos como valor la posición que ocupa
opcion.value= j;
opener.document.forms[0].selec.add(opcion, 0);}

Me da el siguiente error en la linea del .add:

El servidor lanzó una excepción.

¿Se puede hacer?. Si es que si, ¿es la forma correcta, o hay otras mas eficientes, sencillas, o lo que sea?. ¿Mejor con javascript?. ¿Como?. ¿No me va a quedar mas remedio que actualizar la primera pagina desde la segunda perdiendo los valores que el usuario pueda haber introducido en el resto del formulario?.

Si alguién ha hecho algo parecido, le agradecería me dijera como, aunque cambiara un poco el sistema que he descrito.

Espero que alguién pueda hecharme una manita.

Muuuchas gracias.

Francisco.

gilof
16 de Noviembre del 2004
Hola que tal yo estoy en las mismas tengo el mismo problema yo me quede atorado en la ventana secundaria ya que tengo el siguiente codigo el cual primero limpia el select de abajo pero al querer agregarle los nuevos valores envia el error que antes mencionas.

estas son las funciones

function ClearOptions(OptionList)
{
for (var x = OptionList.length; x >= 0; x--)
{OptionList[x] = null;}
}

function AddToOptionList(OptionList, OptionText, OptionValue)
{OptionList[OptionList.length] = new Option(OptionText, OptionValue);}

<SCRIPT LANGUAGE=javascript>
<!--
var iCount = 0;

ClearOptions(opener.Form.CampoPadre);
for (iCount = 0; iCount < document.Form.CampoSec.length; iCount++)
{
AddToOptionList(window.opener.Form.CampoPadre, document.Form.CampoSecundario.options[iCount].text, document.Form.CampoSecundario.options[iCount].value);
}

//-->
</SCRIPT>

espero no confundirte mas

dohem
16 de Noviembre del 2004
Muchas gracias a todos por los consejos y ayudas, a mi tambien me ha servido, tambien tenia un problema parecido. Pero ya puestos (puestos hace un anio, mejor dicho), podria alguien decirme como actuar en la nueva ventana recien abierta igual k lo hemos hecho antes al reves (de la recien abierta a la padre) con el window.opener??
Es que con window.nomre_nueva_ventana no me funciona, me da k no existe tal objeto. AYUDA!
Espero haberme explicado bien, y k alguno de vosotros lea esta peticion tras tanto tiempo... gracias!!
PD:Si me enviarais un mail aunk solo fuera para decirme k me habeis respondido os estaria mil anios agradecido

dohem
16 de Noviembre del 2004
Ya esta solucionado.... realmente era una tonteria y ademas lo peor es que ya lohabia hecho hace tiempo en un pagina pero despues de tanto tiempo y sin volverlo a tocar ni usar para nada.... se me olvido. La cosa seria poner el window.open() como una variable: win=window.open(), para asi usar despues esa variable como la pagina recien abierta ej: win.document.write('lo k sea'). Bueno gracias de todos modos por lo comentado antes de mi estupida cuestion.
Adios

marcelo
16 de Noviembre del 2004
Por favor, necesito saber como solucionaron este tema. No me funciona de ninguna manera.

Grzegorz
16 de Noviembre del 2004
Hola,
Me pasa exactamente lo mismo. Debe ser un bug en el Internet Explorer ya que en Mozilla 1.3 funciona.

jmcontreras
16 de Noviembre del 2004
HOLA AMIGOS :
ESPERO QUE ESTE EJEMPLO LES SEA DE AYUDA ...
LES MANDO TODO EL HTML DE UNA PAGINA PARA QUE PUEDAN MANIPULAR UN OBJETO DE TIPO SELECT ...
LA FUNCION PRINCIPAL SE LLAMA "Transfiere", Y LA MISMA SOPORTA el manejo de transferencia dentro de la misma pagina, manejo entre ventanas (popups), y el manejo entre frames ...
Espero les sriva.
SOLO LES PIDO UN FAVOR, que no le quiten mis datos (nombre y direcciones de mail) ok ??


--- INICIO DE COPIADO AQUI ---
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html>
<head>
<title>Untitled</title>
</head>
<body>
<SCRIPT LANGUAGE="JavaScript1.2">
function Transfiere(ventana_padre, nombre_frame_destino, nombre_forma, nombre_select, texto_add, valor_add ){
/* Esta funcion aniade elementos a un campo de tipo select.
PARAMETROS :
*** PARAMETROS OPTATIVOS ***
ventana_padre = indica si la ventana actual debe de comunicarse con otra para transferir el valor del
texto hacia el select destino (aplicar sin nombre_frame_destino).
nombre_frame_destino = sirve para la comunicacion entre frames, y tranferir el valor al campo de tipo select
de destino.
* SI SE OMITEN ESTOS 2 PRIMEROS PARAMETROS, SE CONSIDERA QUE EL CAMPO SELECT ESTA EN LA MISMA VENTANA, para
omitirlos reemplazarlos por '' (dos comillas sencillas).
*** PARAMETROS NECESARIOS ***
nombre_forma = nombre de la forma.
nombre_select = nombre del select al que se le aniade el valor y el texto ...
texto_add = texto a aniadir en el campo de select.
valor_add = valor (el value del elemento <option>) para el select.
autor : Juan Manuel Contreras Garcia ([email protected], [email protected])
*/
var ref ="window";
ref += ((ventana_padre!="")&&(nombre_frame_destino==""))?".opener.document":".document";
ref += ((ventana_padre=="")&&(nombre_frame_destino!=""))?"parent.parent."+nombre_frame_destino+".document":"";
ref += "."+nombre_forma+"."+nombre_select;
var objSlc = eval(ref) ;
objOpt = new Option(texto_add,valor_add);
objSlc.options[objSlc.length] = objOpt;
}

function ventana(){
if (this.name != "ya"){
alert ("primero presiona el boton de abre ventana");
} else {
Transfiere('1','','frm','nomsel',window.document.frm.txtmas.value,window.document.frm.txtmas.value);
}
}
</SCRIPT>
<FORM NAME="frm">
<SELECT NAME="nomsel">
<OPTION VALUE="1">UNO</OPTION>
<OPTION VALUE="2">DOS</OPTION>
<OPTION VALUE="3">TRES</OPTION>
</SELECT>
<INPUT TYPE="Text" NAME="txtmas" VALUE=""><BR>
Este boton funciona local : <INPUT TYPE="Button" VALUE="MAS" OnClick="Transfiere('','','frm','nomsel',window.document.frm.txtmas.value,window.document.frm.txtmas.value);"><BR>
Este boton abre una ventana (poppup): <INPUT TYPE="Button" VALUE="abre ventana" OnClick="window.open('prueba_manejo_select.html','ya');"><BR>
Este boton transfiere el valor del campo de texo al select (de la ventana padre): <INPUT TYPE="Button" VALUE="ventanas" OnClick="ventana();"><BR>
</FORM>
</body>
</html>
--- FINAL DE COPIADO AQUI ---

vgarcia
16 de Noviembre del 2004
HOla, yo he tenido el mismo caso y con javascript, al crear un nuevo option sale el mismo error "El servidor lanzó una excepción". Si has logrado ya hacerlo por favor dime cómo.
Por ahora para resolver este problema, hemos puesto una primera opción del select, la número cero, como "Seleccione ..." y desde la ventana que se abre lo que hacemos es cambiar dicha opción a partir del nuevo registro creado en la ventana emergente. Cambiamos el text, el value y lo marcamos como seleccionado.

Saludos