我目前正在为我的大学做一个项目。我需要做的一件事是将所有注册的JavaScript事件处理程序与服务器同步。也就是说,我需要知道哪些元素有一个特定的事件处理程序。
我已经使用VisualEvent来找出哪些元素具有事件处理程序,它的工作效果非常好。
但我需要的是有一个事件监听器,每次为DOM元素注册事件处理程序时都会调用它。
因此,基本上,每次调用类似$("#foo").click(...)
或$("#foo").bind(...)
的东西时,我都需要获得为该元素注册了新事件处理程序的信息。
反之亦然,当从DOM元素中删除事件处理程序时,我需要一个监听器,但这对第一个原型来说不是强制性的。
有没有一种方法可以将处理程序全局附加到所有事件处理程序注册?
如果您需要更多信息,请随时发表评论。
如果您使用的是jQuery 1.7+,所有附加事件的方法都要经过jQuery.fn.on
,所以这是一个简单的情况,即超越该函数并变得疯狂;
(function () {
var old = jQuery.fn.on;
jQuery.fn.on = function (events, selector, data, handler) {
// Ensure you still attach the events
var result = old.apply(this, arguments);
// Now do your own thing
// Inside here, `this` refers to the jQuery object on which `on` was invoked;
// it's not a specific element like it normally is within jQuery. You then
// therefore use something like `this.each(function () { /* this */ }); to
// target each element in the set.
// You might want to normalize the variables, as selector and data are optional,
// and events can be an object or string
jQuery.post('/spy.php', {
events: events,
selector: selector,
data: data
}, jQuery.noop);
return result; // keep the signature of `on`, and return the value `on()` *would* have done.
};
}());
如果您使用的是jQuery<1.7并且无法升级,您可以执行与上面类似的操作,但必须覆盖bind()
、live()
、delegate()
等。