2009-05-12 11 views
8

Tengo una página web con un elemento de formulario y una ventana emergente (abierto por window.open).Levante el evento "alCambiar" cuando el elemento de entrada cambió por JavaScript desde la ventana emergente

Ambos tienen jQuery disponible.

La ventana emergente tiene un javascript que puede cambiar el elemento de formulario en la ventana de apertura. Eso funciona perfectamente haciendo ...

$(opener.document.formelement).val(vals[0]); 

Sin embargo, al hacer esto, el evento onChange no se disparará. Eso sería requerido por algunos otros elementos de página, sin embargo. Así que traté de disparar el evento onChange mí mismo con

$(opener.document.formelement).change(); 

Pero eso no hace nada.

¿Alguna pista? Definitivamente tengo que tener ese evento onChange disparado debido a la arquitectura de otros elementos de la página.

Esta pregunta es similar a Call Javascript onchange event by programatically changing textbox value, pero las soluciones sugeridas a partir de esa pregunta no parecen funcionar para mí. Tal vez sea por la ventana emergente.

Respuesta

10

Tal vez sea la ventana que te está lastimando ... Intenta hacer una función dentro del abridor al que llamas. ¿Podría ayudar?

En primer partido:

window.changeMyElement = function(value) { 
    $(formelement).val(value).change(); 
} 

De emergente:

opener.changeMyElement(value); 
+0

Gracias. Eso funcionó perfectamente! – BlaM

+2

abridor. $ ('...'). Val (newval) .change(); – Tracker1

2

Esta línea se supone que funciona:

$(opener.document.formelement).change(); 

De acuerdo con el jQuery documentation esta línea desencadena el evento de cambio de cada elemento coincidente.

Si no funciona para usted, entonces hay un problema en su código en alguna parte. ¿Puedes disparar el evento onchange cambiando en el elemento de forma a mano?

+0

Y es, yo puedo Funciona perfectamente (aunque generalmente debería ser un elemento oculto). Sin embargo, sospecho que está prohibido ejecutar JavaScript en el "abridor" de una ventana emergente debido a razones de seguridad. Y disparar un evento ejecutaría JavaScript. – BlaM

0

También puede hacer:

window.opener.document.getElementById('controlname').fireEvent('onchange'); 

o en su contexto:

$(opener.document.formelement).fireEvent('onchange'); 
+1

Tenga en cuenta que esto solo es realmente útil con IE, y solo con versiones anteriores a la 9: http://help.dottoro.com/ljvtddtm.php – RustyTheBoyRobot

Cuestiones relacionadas