2012-01-19 35 views
1

我用HTML/jQuery的頁面是工作別人寫了,而以前的任何元素執行。爲了調試,我需要找到頁面加載時觸發任何元素的所有.blur()事件。找到所有模糊()事件在頁面加載

我可以使用下面的一個事件綁定的所有元素:

$("*").each(function() { 
    $(this).blur(function() { 
     alert(this); 
    }); 
}); 

然而,這是不行的(即使我可以在網頁加載之前運行的話),因爲網頁上的腳本,重新綁定.blur()無論如何。

有沒有一種方法,我可以看到什麼.blur()事件在頁面加載執行?我想我可能能夠在運行時覆蓋內部jQuery函數,而不會被blur事件綁定覆蓋,但不知道是否可能。

+0

我仍然不完全確定你在問什麼。你是否想將自己的'blur'事件附加到所有元素(這對調試有什麼幫助?)?你想要一個所有具有「blur」事件處理程序的元素的列表嗎?或者你想知道哪些元素在加載頁面後觸發了'blur'事件處理程序? –

+0

@Anthony第三個選項正是我需要做的:) – Flash

+0

在這種情況下,@ RobW的答案**可以**做你所需要的。在一個元素上多次調用'.blur()'(或'.click()'等)不會覆蓋之前添加的處理程序。但是,如果現有的jQuery代碼(無論出於何種原因)執行'$('selector')。unbind('blur')。blur(function(e){...});'您可能遇到問題附加您的通用處理程序的正確位置。 –

回答

2

綁定blur事件document使用.on('blur', '*', ...)(jQuery的1.7+):

$(document).on('blur', '*', function(e) { 
    e.stopPropagation(); // Otherwise, many alerts will pop up for each event 
    alert(this); 
}); 

如果你沒有jQuery的1.7+,使用delegate代替:

$(document).delegate('*', 'blur', function(e) { 
    e.stopPropagation(); // Otherwise, many alerts will pop up for each event 
    alert(this); 
});