2013-06-13 25 views
8

Mam kalendarz i po kliknięciu na <td> pojawia się wyskakujące okienko, dzięki czemu można utworzyć wyrównanie na wybraną datę. Chcę dodać funkcję.Wywołanie JavaScriptu z okna nadrzędnego z okna podrzędnego

Gdy użytkownik ukończy tworzenie zdarzenia, chcę wysłać żądanie JavaScript do strony nadrzędnej, aby można było odświeżyć kalendarz za pomocą AJAX. Zasadniczo chcę wywołać funkcję z potomka, ale funkcja jest na stronie nadrzędnej.

W Google znalazłem tylko skrypt, który może odświeżyć okno nadrzędne - nic o "nadrzędnym oddzwonieniu". ☹ Czy to możliwe?

P.S. Odpowiedź może być czystym JS lub jQuery, to nie ma znaczenia. Będę szukał w międzyczasie.

+0

@Neal Dawid powiedział, że szukał w Google takich rzeczy, jak "oddzwonienia od rodzica", co, jak sądzę, jeśli jego poszukiwania były dokładne, to rozsądny wysiłek. Zauważ, że, o ile wiem, David nie prosi o pełny kod do aktualizacji i wyświetlania kalendarza. Po prostu pyta o ogólny sposób wyskakującego okna, aby wywołać funkcję w oknie nadrzędnym. –

+0

To jest bardzo ważne pytanie, które zostało rzucone bardzo często, nie wiem, dlaczego zostało odrzucone. Mogę sobie wyobrazić, że w nadchodzących wersjach przeglądarek zobaczymy, że javascript może współdziałać z platformą okienkową na bardziej dogłębnym poziomie. – OneChillDude

+0

Dziękuję wam za obronę tego pytania. Po prostu pytam "jak to zrobić", ale nie potrzebuję kodu ... I tak, zrobiłem kilka badań i wszystko, co znalazłem, to jak ti refrech okno nadrzędne. Nic nie znalazłem. Teraz mam nadzieję, że w przyszłości to pytanie może stać się najlepszą wyszukiwarką w Google i pomóc większej liczbie osób potrzebujących. –

Odpowiedz

13

To, czego szukasz, to odniesienie do window, które otworzyło okno wyskakujące. Kiedy już to zrobisz, możesz wywoływać funkcje w tym oknie, odczytać i zapisać zmienne w tym oknie, a nawet manipulować jego DOM.

To odwołanie nazywa się opener. To daje obiekt window dla okna, które otworzyło bieżące okno. Na przykład, jeśli masz funkcję w oryginalnym oknie jak poniżej:

function updateMe(data) { 
    alert(data); 
} 

następnie w oknie, można nazwać tak:

opener.updateMe('Hello!'); 

Naturalnie, trzeba się upewnić, że updateMe() jest globalną funkcją na oryginalnej stronie. Lub jeśli masz jakiś obiekt na oryginalnej stronie i updateMe() jest metodą tego obiektu, możesz to zrobić, o ile obiekt jest globalny. na przykład na stronie hosta:

var myObject = { 
    updateMe: function(data) { 
     alert(data); 
    } 
}; 

następnie w menu podręcznym można zrobić:

opener.myObject.updateMe('Hello!'); 

Zasadniczo, tak długo, jak można dostać się do obiektu lub funkcji w oryginalnej strony z window.whatever, a następnie w popup możesz po prostu zmienić na opener.whatever.

+1

MDN [dokumentacja dla 'window.opener'] (https://developer.mozilla.org/en-US/docs/Web/API/window.opener) –

+0

Dziękuję. Z tego, co widzę, tego właśnie szukałem. Spróbuję tego jutro w pracy! –

+0

Działa jak urok! Wielkie dzięki, nauczyłem się czegoś dzisiaj! –