侦听新注册的事件处理程序



我目前正在为我的大学做一个项目。我需要做的一件事是将所有注册的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()等。

相关内容

  • 没有找到相关文章

最新更新