2009-05-12 5 views
8

Ho una pagina Web con un elemento modulo e una finestra popup (aperta da window.open).Aumenta l'evento "onChange" quando Input Element modificato da JavaScript dalla finestra popup

Entrambi hanno jQuery disponibile.

La finestra popup ha un javascript che può modificare l'elemento del modulo nella finestra di apertura. Che funziona perfettamente facendo ...

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

Tuttavia facendo ciò l'evento onChange non si attiva. Ciò sarebbe richiesto da alcuni altri elementi della pagina, però. Così ho provato a lanciare l'evento onChange con

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

Ma questo non fa nulla.

Eventuali suggerimenti? Devo assolutamente fare in modo che l'evento onChange sia attivato a causa dell'architettura di altri elementi della pagina.

Questa domanda è simile a Call Javascript onchange event by programatically changing textbox value, ma le soluzioni suggerite da quella domanda non sembrano funzionare per me. Forse è a causa del popup.

risposta

10

Forse è la finestra a croce che ti fa male ... Prova a fare una funzione all'interno dell'apertide che chiami invece. Potrebbe aiutare?

In apertura:

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

Da comparsa:

opener.changeMyElement(value); 
+0

Grazie. Ha funzionato perfettamente! – BlaM

+2

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

2

Questa linea dovrebbe funzionare:

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

Secondo il jQuery documentation questa linea attiva l'evento di modifica di ogni elemento abbinato.

Se non funziona per te, c'è un problema nel codice da qualche parte. Puoi attivare l'evento onchange modificando l'elemento del modulo a mano?

+0

Y es, posso. Funziona perfettamente (anche se di solito dovrebbe essere un elemento nascosto). Tuttavia, sospetto che sia vietato eseguire JavaScript in "apertura" da un popup a causa di motivi di sicurezza. E l'attivazione di un evento eseguiva JavaScript. – BlaM

0

È anche possibile fare:

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

O nel vostro contesto:

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

Tieni presente che questo è davvero utile solo con IE e solo versioni precedenti a 9: http://help.dottoro.com/ljvtddtm.php – RustyTheBoyRobot

Problemi correlati