无法在jQuery中监听全局事件

Mr.*_*r.H 15 javascript jquery

stackoverflow上的另一个问题指出应该可以使用以下命令在所有列表对象上触发事件:

$.event.trigger('customEvent');
Run Code Online (Sandbox Code Playgroud)

然而,在以下示例中,这对我来说似乎不起作用:

$('body').bind('customEvent', function(){ alert('Working!'); });
Run Code Online (Sandbox Code Playgroud)

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

Dan*_*mms 5

看起来该功能已被删除.浏览标签我在v1.8b1中找到了这个TODO:

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

它从v1.9.0开始被删除.

没有什么可以阻止你根据这里的旧源代码(v1.6.2)实现它,但看起来它正在做顽皮的事情,jQuery.cache所以最好没有它或没有提出另一种解决方案.

$('*').trigger('customEvent');
Run Code Online (Sandbox Code Playgroud)

也许?(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');
Run Code Online (Sandbox Code Playgroud)