2009-05-12 10 views
8

Mam stronę internetową z elementem formularza i oknem popup (otwieranym przez window.open).Podnieś zdarzenie "onChange", gdy element wejściowy został zmieniony przez JavaScript z okna Popup

Oba mają jQuery dostępne.

Okno wyskakujące zawiera javascript, który może zmienić element formularza w oknie otwieracza. Działa to idealnie, wykonując ...

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

Jednak w ten sposób zdarzenie onChange nie zostanie uruchomione. Byłoby to jednak wymagane przez niektóre inne elementy strony. Dlatego próbowałem wystrzelić zdarzenie onChange samodzielnie pod nr:

Ale to nic nie robi.

Jakieś wskazówki? Zdecydowanie muszę mieć to wydarzenie OnChange z powodu architektury innych elementów strony.

To pytanie jest podobne do Call Javascript onchange event by programatically changing textbox value, ale sugerowane rozwiązania z tego pytania nie działają dla mnie. Może to ze względu na popup.

Odpowiedz

10

Być może jest to krzyżyk, który cię ranił ... Spróbuj wywołać funkcję wewnątrz otwieracza, którą nazywasz. Może pomóc?

W otwieracza:

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

Od popup:

opener.changeMyElement(value); 
+0

Dzięki. To działało idealnie! – BlaM

+2

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

2

Linia ta ma działać:

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

Według jQuery documentation Linia ta wywołuje zdarzenie change każdego dopasowanego elementu.

Jeśli to nie działa, oznacza to, że gdzieś występuje problem z kodem. Czy możesz wywołać zdarzenie onchange, zmieniając element formularza ręcznie?

+0

Y es, mogę. Działa idealnie (choć zazwyczaj powinien to być ukryty element). Podejrzewam jednak, że zabronione jest uruchamianie JavaScriptu w "otwieraczu" z wyskakującego okienka ze względów bezpieczeństwa. Wypalanie zdarzenia spowodowałoby uruchomienie JavaScript. – BlaM

0

Można również zrobić:

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

lub w kontekście:

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

Ostrzegam, że jest to przydatne tylko w IE i tylko wersje wcześniejsze niż 9: http://help.dottoro.com/ljvtddtm.php – RustyTheBoyRobot

Powiązane problemy