2011-06-02 187 views
4

假設有一個<img>元素具有一些事件處理程序。例如,點擊它確實是alert("OldEventHandler")在現有處理程序之前附加我的事件處理程序

我想在現有的之前添加我的事件處理程序。例如我的事件處理程序函數確實是alert("NewEventHandler")

所以點擊我想看到「NewEventHandler」彈出窗口,然後是「OldEventHandler」彈出。

這需要在純JavaScript中實現; 沒有jQuery請。

回答

11

您可以保存原來的處理程序,然後調用它你完成後:

var oldHandler = myElement.onclick; 

myElement.onclick = function() { 
    // do your stuff here 
    ... 

    // then call the original 
    oldHandler.apply(this, arguments); 
} 
+0

聽起來很合理,謝謝,我會試試看。 – 2011-06-02 20:43:30

+0

似乎不工作,如果添加addEventListener處理程序除了onclick(它們將首先被調用第一個) – 2017-03-03 12:08:20

+0

@ alex_1948511可能取決於添加了「addEventListener」的處理程序是否註冊爲_capturing_處理程序或_bubbling_處理程序。 '.onclick'處理程序被視爲後者,併發生在捕獲處理程序之後。 http://www.quirksmode.org/js/events_order.html – Alnitak 2017-03-03 12:46:32

0

這個問題的另一種方法是創建一個存儲的功能的陣列在一些一通用事件處理程序預定義順序。當觸發onclick()事件時,您可以按照該順序調用所需的函數。

+0

這將工作,如果所有處理函數將被設置爲我。但在這種情況下 - 默認事件處理程序是由外部代碼(我無法訪問)設置的,我不想完全防止它。我只想在它之前插入我的處理程序。 – 2011-06-02 20:41:16