Programación Web y Scripting > JavaScript
Alguna Idea? Combos Y Js
(1/1)
moonshadow88:
Tengo una página web con un combo y un boton que me abre un popup. Desde ese popup quiero insertar un nuevo option en el combo de la ventana padre y no hay manera. alguna idea?
os pongo el código:
fichero: main.html
--- Código: Text --- <html><head> <title>prueba</title><head><script language="javascript"> function haz(){ window.open("popup.html","","top=0; left=0; height=350; width=450; location: no; status: no; scrollbars: yes;"); }</script> <body> <select name="slct" id="slct" size="5"> <option value="sin valor">sin texto</option> </select><input type="button" value="accion" onClick="javascript:haz();"><br><input type="text" name="texto" id="texto" value="texto antes de modif" size="50"></body></html>
fichero: popup.html
--- Código: Text --- <html><head> <title>pop up</title><head><script language="javascript"> function acc(){ var TmpOpt = new Option("opcion1.jpg","opcion1.jpg"); var obj = top.window.opener.document.getElementById('slct'); var obj2 = document.getElementById('slct2'); var obj3 = top.window.opener.document.getElementById('texto'); document.getElementById("log").value = document.getElementById("log").value + "objeto texto: " + obj3+"\n"; document.getElementById("log").value = document.getElementById("log").value + "objeto texto.text: " + obj3.value+"\n"; document.getElementById("log").value = document.getElementById("log").value + "objeto select: " + obj+"\n"; document.getElementById("log").value = document.getElementById("log").value + "objeto select.type local: " + obj2.type+"\n"; document.getElementById("log").value = document.getElementById("log").value + "objeto select.type remoto: " + obj.type+"\n"; document.getElementById("log").value = document.getElementById("log").value + "objeto tmpopt: " + TmpOpt+"\n"; document.getElementById("log").value = document.getElementById("log").value + "valor tmpopt: " + TmpOpt.value+"\n"; document.getElementById("log").value = document.getElementById("log").value + "texto tmpopt: " + TmpOpt.text+"\n"; document.getElementById("log").value = document.getElementById("log").value + "objeto select options: " + obj.options+"\n"; document.getElementById("log").value = document.getElementById("log").value + "objeto select options[0].value: " + obj.options[0].value+"\n"; document.getElementById("log").value = document.getElementById("log").value + "objeto select options[0].text: " + obj.options[0].text+"\n"; obj3.value = "texto cambiado desde ventana remota"; obj2.options[1] = TmpOpt; obj.options[1] = TmpOpt; // por que no funciona esto????? }</script> <body> <input type="button" value="accion" onClick="javascript:acc();"><br><br> <textarea name="log" cols="50" rows="12"></textarea> <select name="slct2" id="slct" size="3"> <option value="sin valor local">sin texto local</option> </select></body></html>
JrcsDev:
Pienso que para esto necesitarias especificar más... por ejemplo, suponiendo que las opciones del combo las cargues desde la base de datos, entonces podrías usar ajax para insertar registros en la tabla. Pero si tu combo se carga directamente de código HTML, entonces puedes crear un objeto option de javascript...
posman:
Alguna vez me paso el mismo problema. No se cual haya sido la causa. Tal vez el problema sean las referencias de memoria entre los objetos creados en una ventana hija y hacer referencia a ellos desde la ventana padre. Seguramente habra una explicacion mas "cientifica", pero cambie un poco el codigo que pusiste. Lo que hice fue agregar una funcion "agregar" (que original, verdad?) a la pagina principal para que ella misma cree el objeto. Y en el popup, se manda llamar esa funcion.
main.html
--- Código: Text --- function agregar(param1,param2) { var obj = document.getElementById("slct"); obj.options[obj.options.length] = new Option(param1, param2);}function haz() { window.open("popup.html","","top=0; left=0; height=350; width=450; location: no; status: no; scrollbars: yes;");}
popup.html
--- Código: Text --- function acc() { //var TmpOpt = window.opener.crear("opcion1.jpg","opcion1.jpg"); dato1 = "opcion1.jpg" valor1 = "opcion1.jpg" var TmpOpt = new Option(dato1,valor1); var obj = top.window.opener.document.getElementById('slct'); var obj2 = document.getElementById('slct2'); var obj3 = top.window.opener.document.getElementById('texto'); log = document.getElementById("log"); log.value += "objeto texto: " + obj3+"\n"; log.value += "objeto texto.text: " + obj3.value+"\n"; log.value += "objeto select: " + obj+"\n"; log.value += "objeto select.type local: " + obj2.type+"\n"; log.value += "objeto select.type remoto: " + obj.type+"\n"; log.value += "objeto tmpopt: " + TmpOpt+"\n"; log.value += "valor tmpopt: " + TmpOpt.value+"\n"; log.value += "texto tmpopt: " + TmpOpt.text+"\n"; log.value += "objeto select options: " + obj.options+"\n"; log.value += "objeto select options[0].value: " + obj.options[0].value+"\n"; log.value += "objeto select options[0].text: " + obj.options[0].text+"\n"; obj3.value = "texto cambiado desde ventana remota"; obj2.options[1] = TmpOpt; try { //obj.options[1] = TmpOpt; // por que no funciona esto?????} window.opener.agregar(dato1,valor1); } catch(e) { alert(e.message); } }
Navegación
Ir a la versión completa