2015-08-14 252 views
2

我试图找出当一些自定义事件正在发射。这个网站是用jQuery设计的。所以我想为所有的事件添加一个事件监听器。我试过了:jquery触发任何和所有自定义事件的功能

$('*').on('*', function(e) { 
    console.log('custom event name that just triggered:', e.eventName, 'selector of element that it triggered on:', e.target); 
}); 

这没有奏效。我知道如果我看到所有这些都会导致糟糕的表现,那就是为什么我不想看标准事件,只是定制事件。

+3

正如一边:你想附加一个事件侦听器*每个*事件的*每个* DOM节点?这可能会导致页面崩溃 - 或者大幅度降低性能(请考虑'mousemove'触发的频率);试着将事件监听器附加到'body'元素上(尽管这不能解决问题的“* every event *”方面)。 –

+1

请检查这个答案:http://stackoverflow.com/questions/7439570/how-do-you-log-all-events-fired-by-an-element-in-jquery – Moussawi7

+0

谢谢@DavidThomas,但不是为标准事件,我只想捕获所有* custom *事件名称。 – Noitidart

回答

1

有一种方法可以生成添加到页面的所有事件的列表,但是我建议不要在生产代码中执行它。如果你完全可以避免这样做,那很好,但基本上你想在加载页面上的任何其他JavaScript之前运行下面的代码片段。

var events = {}; 
var original = window.addEventListener; 

window.addEventListener = function(type, listener, useCapture) { 
    events[type] = true; 
    return original(type, listener, useCapture); 
}; 

这会给你一个对象,其键是你的触发器。

然后,您可以使用这些键生成您可以传递给jQuery的事件的一个链接列表。

var list = Object.keys(events).join(" "); 

$('*').on(list, function(e) { 
    console.log(
     'custom event name that just triggered:', e.eventName, 
     'selector of element that it triggered on:', e.target); 
}); 
+0

感谢罗宾,我没有在生产中使用,我只需要这个在网站上的研究我试图做一个书签为。该网站是推特,我无法在加载之前添加此代码,有没有运行时间的方法可能吗?所以似乎获得标准事件,是手动过滤出来的唯一方法(如从列表中删除标准事件)? – Noitidart

+1

我希望有一些方法可以在页面载入中尽早运行它,也许可以通过突出显示最早的JS行和刷新,这可能对您有所帮助。有关您可能需要过滤的标准事件列表,请查看https://developer.mozilla。组织/ EN-US /文档/网络/活动。应该相当简单地将它们的列表添加到上面的代码中,并跳过添加到标准事件列表中的任何'type'的'events'对象。 –

+0

谢谢罗宾!我会实验:) – Noitidart

相关问题