2012-07-11 9 views

Odpowiedz

7

jQuery można zrobić korzystanie data("events") na dowolnym obiekcie (tutaj okna):

var hasbeforeunload = $(window).data("events") && $(window).data("events").['beforeunload']; 

Ale to działa tylko na imprezy jquery dodaje.

W bardziej ogólnym przypadku należy po prostu przechowywać informacje, które dodać słuchacza gdzieś:

var addedListeners = {}; 
    function addWindowListenerIfNone(eventType, fun) { 
     if (addedListeners[eventType]) return; 
     addedListeners[eventType] = fun; 
     window.addEventListener(eventType, fun); 
    } 

myślę nie ma standardowy sposób w javascript, aby istniejące procedury obsługi zdarzeń. W najlepszym wypadku można naliczaniu dodatkowych funkcji addEventListener węzła do przechwytywania i przechowywania słuchaczy, ale nie polecam go ...

EDIT:

Od jQuery 1.8, dane zdarzeń są dostępne w $._data(element, "events"). Dziennik zmian zawiera ostrzeżenie, które należy wziąć pod uwagę:

Należy zauważyć, że nie jest to obsługiwany interfejs publiczny; rzeczywiste struktury danych mogą się niesatysfakcjonująco zmieniać z wersji na wersję.

+0

+1 na równinie javascript, ale może zrobić to przekrój przeglądarkę (attachEvent). –

+1

Może. Zostanie to zrobione [jak wyjaśniono przez MDN] (https://developer.mozilla.org/en/DOM/element.addEventListener#Legacy_Internet_Explorer_and_attachEvent) –

+0

Dziękuję za próbę z jQuery, jednak potrzebuję natywnej wersji Javascript, przepraszam, że nie wspomniałem . Będę jednak podążał za twoją próbą flagi. Będę czekać na dalsze odpowiedzi, a jeśli nie lepiej, wybiorę twoje. – Patrick

21

W rzeczywistości nie ma potrzeby, aby sprawdzić, czy detektor został dodany do docelowej:

Jeśli wiele identycznych eventListeners są zarejestrowane w tej samej nasłuchujący z tymi samymi parametrami, zduplikowane wystąpienia są odrzucane. Nie powodują wywołania funkcji EventListener dwa razy, a ponieważ duplikaty są odrzucane, nie trzeba ich usuwać ręcznie przy użyciu metody removeEventListener.

Źródło: https://developer.mozilla.org/en-US/docs/Web/API/EventTarget.addEventListener#Multiple_identical_event_listeners

+18

Niestety, nie jest to prawdą. przynajmniej nie dla chromu. – ses

+0

Tak, to nie jest prawda, przekonaj się sam https://jsfiddle.net/rockes/mbd5s1ko/ –

+9

To prawda, jeśli faktycznie używasz tego samego detektora, nie tylko słuchacza o tym samym tekście: https:// jsfiddle.net/myxqu27d/ – Atario

Powiązane problemy