Javascript 捕获所有DOM事件
我试图捕获页面上的所有DOM事件。这是我为此而设计的源代码。它需要jQuery。有没有更好的实施方案?看到我的实现有什么问题吗 //必需的jQueryJavascript 捕获所有DOM事件,javascript,jquery,javascript-events,Javascript,Jquery,Javascript Events,我试图捕获页面上的所有DOM事件。这是我为此而设计的源代码。它需要jQuery。有没有更好的实施方案?看到我的实现有什么问题吗 //必需的jQuery $('*').each(function () { var ignore = [ 'mousemove', 'mouseover', 'mouseout', 'mouseenter', 'mouseleave' ]; for (var key in this) { if (key.su
$('*').each(function () {
var ignore = [
'mousemove', 'mouseover', 'mouseout', 'mouseenter', 'mouseleave'
];
for (var key in this) {
if (key.substring(0, 2) === 'on') {
$(this).on(key.substr(2), function (event) {
var eventName = event.type,
tag = this.tagName.toLowerCase(),
id = this.id ? ('#' + this.id) : '';
if (ignore.indexOf(eventName) === -1) {
console.log(tag + id + ' ' + eventName);
}
});
}
}
});
也许使用内置的
\u data
帮助程序,类似这样的东西
$('*').each(function (i, el) {
var events = $._data(el, 'events');
if (events) {
console.log(el);
for (var p in events) {
if (ignore.indexOf(p) === -1) { console.log(p); }
}
}
});
(尝试将其添加到此页面的控制台-您将看到元素及其事件滚动过去)。可能类似以下内容:
function doSomething() { console.log('yay'); }
var eventName,
prefix;
for (var key in document) {
prefix = key.substr(0, 2);
if (prefix === "on") {
eventName = key.substr(2);
document.addEventListener(eventName, doSomething, true);
}
}
它不需要jQuery,并在捕获模式下添加侦听器,这意味着如果停止传播,事件仍将被触发。当然,如果您愿意,您可以添加过滤
请注意,如果任何插件在您添加事件之前就添加了事件,那么在您访问它们之前,这些事件可能会被取消。如果您使用的是chrome,您可以在控制台中调用一种调试方法,该方法将记录特定元素上特定类型发生的所有事件。关于改进工作代码的问题应该在我们的姐妹网站上询问。Kevin B的“调试方法”是什么?
monitorents(element,event)
例如,monitorents(document.body)
但是,还有一个更好的选择: