2015-06-09 54 views
1

我想選擇所有將javascript函數作爲監聽器添加到onClick的html元素。選擇所有添加了onClick監聽器(js函數)的元素

我可以選擇他們,如果他們增加的onclick在HTML 與$("[onclick]")的屬性,但可以在以後使用javascript添加的偵聽器。

是否可以選擇所有元素,而不管監聽器的添加方式如何?在示例中返回這兩個元素。

(function(){ 
 
function modify() { 
 
    alert('inca un salut'); 
 
} 
 
var t2 = document.getElementById("button2"); 
 
t2.addEventListener("click", modify, false); 
 
console.log($("[onclick]")); 
 
}())
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<input type="button" id="button1" onclick="alert('salut')" value="click here" /> 
 

 
<input type="button" id="button2" value="click here element 2" />

還是這裏的jsfiddle http://jsfiddle.net/alexrada/dpbgw6yk/3/

+0

爲什麼沒有你的函數把所有具有'onClick'屬性的元素放到一個數組中,然後提醒那些元素。通過這種方式,每次單擊時,都會使用'onClick'重新檢查元素的HTML並填充數組。 – Pogrindis

+0

因爲我的.js會運行在其他網站上,我無法控制 –

+0

你是什麼意思?您的JavaScript將抓取這些元素的另一個網站? – Pogrindis

回答

2

它實際上取決於該事件是如何附着在JavaScript中的DOM元素。它可以使用jQuery或其他庫或純JavaScript來添加。

如果你想知道如何使用jQuery連接事件,那麼你可以做這樣的事情。所以

var clickEvents = $(element).data("events").click; 
$.each(clickEvents, function(key, event) { 
    alert(event.handler) 
}); 

與在線onclick事件處理一起,並通過JavaScript附加事件會給你的DOM元素上的事件處理程序的總數。

我認爲,我們不能檢查與addEventListenerattachEvent(IE specific)

演示http://jsfiddle.net/onzof2eL/

連接如果您正在使用更高版本的jQuery的事件處理程序,那麼你必須使用$._data(element, "events")像@Frogmouth在評論中提到以下。

+2

'$(element).data(「events」)'由於版本'1.8'使用'$ ._ data(element,「events」)''而被棄用。 – Frogmouth

+0

@wolff - 我想我們不能檢查附加了「addEventListener」或「attachEvent(特定於IE)的事件處理程序」 – ShankarSangoli