无法在jQuery中监听全局事件

时间:2013-04-02 11:09:58

标签: javascript jquery

Another question on stackoverflow指出应该可以使用以下命令在所有列表对象上触发事件:

$.event.trigger('customEvent');

然而,在以下示例中,这似乎不适合我:

$('body').bind('customEvent', function(){ alert('Working!'); });

我做错了什么,或者这个功能被禁用了吗?

1 个答案:

答案 0 :(得分:5)

看起来该功能已被删除。通过浏览标签,我找到了this TODO in v1.8b1

  

// TODO:停止嘲弄数据缓存;删除全局事件并始终附加到文档

v1.9.0起删除它。

没有什么可以阻止你根据旧的源代码here (v1.6.2)实现它,但看起来它正在与jQuery.cache进行顽皮的讨论,所以最好不要没有它或者出现它与另一种解决方案

$('*').trigger('customEvent');

也许? (jsFiddle

或者更有效的方法来跟踪每个订阅并在其上调用.trigger()

jsFiddle

var customSubs;

$.fn.subscribeCustom = function (fn) {
    this.on('customEvent', fn);
    if (!customSubs)
        customSubs = this;
    else
        customSubs = customSubs.add(this);
};

$('span').subscribeCustom(function () {
    alert('span!');
});
$('div').subscribeCustom(function () {
    alert('div!');
});

customSubs.trigger('customEvent');