我正在尋找一種方法,我可以列出所有事件監聽器綁定與JS(或其他腳本以及)在網站上製作。主要我想找出雙重綁定(出於調試原因),但我想還有其他問題。有沒有辦法在javascript中獲取所有事件監聽器綁定?
輝煌將是一個瀏覽器插件,你可以在網站上看到哪些元素具有哪些事件監聽器綁定的插件。要知道,事件偵聽器的一些可視化...
感謝鏈接,腳本和評論;-)
我正在尋找一種方法,我可以列出所有事件監聽器綁定與JS(或其他腳本以及)在網站上製作。主要我想找出雙重綁定(出於調試原因),但我想還有其他問題。有沒有辦法在javascript中獲取所有事件監聽器綁定?
輝煌將是一個瀏覽器插件,你可以在網站上看到哪些元素具有哪些事件監聽器綁定的插件。要知道,事件偵聽器的一些可視化...
感謝鏈接,腳本和評論;-)
只有一種類型的事件聲明的,你得到它,我不知道這是否將幫助你:
// Can't get
myDiv.attachEvent ("onclick", function() {alert (1)});
// Can't get
myDiv.addEventListener ("click", function() {alert (1)}, false);
// Can't get
<div onclick = "alert (1)"></div>
// Can get
myDiv.onclick = function() {alert (1)}
你也可以看看answer。無論如何,我爲你做了一個功能:
<!DOCTYPE html>
<html>
<head>
<script>
function getAllEvents() {
var all = document.getElementsByTagName ("*");
var _return = "";
for (var i = 0; i < all.length; i ++) {
for (var ii in all[i]) {
if (typeof all[i][ii] === "function" && /^on.+/.test (ii)) { // Unreliable
_return += all[i].nodeName + " -> " + ii + "\n";
}
}
}
return _return;
}
document.addEventListener ("DOMContentLoaded", function() {
var div = this.getElementsByTagName ("div")[0];
div.onclick = function() {
alert (1);
}
div.onmouseout = function() {
alert (2);
}
alert (getAllEvents());
}, false);
</script>
<style>
div {
border: 1px solid black;
padding: 10px;
}
</style>
</head>
<body>
<div></div>
</body>
</html>
視覺事件(http://www.sprymedia.co.uk/article/Visual+Event+2)是非常有益的。轉到此頁面,只需將「視覺事件」鏈接拖到書籤欄即可。當你想檢查一個頁面,只需點擊它,等待一秒鐘,每個元素的事件將被覆蓋在頁面上。
我只是寫了一個腳本,可以讓你做到這一點。它給你兩個全局函數:hasEvent(Node elm, String event)
和getEvents(Node elm)
,你可以使用它。要知道,它修改EventTarget
原型法add/RemoveEventListener
,並通過HTML標記或elm.on_event = ...
JavaScript語法添加事件不工作,僅適用於add/RemoveEventListener
。
腳本:
var hasEvent,getEvents;!function(){function b(a,b,c){c?a.dataset.events+=","+b:a.dataset.events=a.dataset.events.replace(new RegExp(b),"")}function c(a,c){var d=EventTarget.prototype[a+"EventListener"];return function(a,e,f,g,h){this.dataset.events||(this.dataset.events="");var i=hasEvent(this,a);return c&&i||!c&&!i?(h&&h(),!1):(d.call(this,a,e,f),b(this,a,c),g&&g(),!0)}}hasEvent=function(a,b){var c=a.dataset.events;return c?new RegExp(b).test(c):!1},getEvents=function(a){return a.dataset.events.replace(/(^,+)|(,+$)/g,"").split(",").filter(function(a){return""!==a})},EventTarget.prototype.addEventListener=c("add",!0),EventTarget.prototype.removeEventListener=c("remove",!1)}();
有這樣的jQuery的。它的螢火蟲擴展名爲firequery:http://firequery.binaryage.com/但我不知道它是否也適用於原生javascript事件。 – meo 2011-03-14 09:44:56
hm ...這是第一步...可能需要時間來適應它 – helle 2011-03-14 12:28:35