15

关于 stackoverflow 的另一个问题指出,应该可以使用以下方式触发所有列表对象上的事件:

$.event.trigger('customEvent');

但是,这似乎对我不起作用,例如:

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

我是在做完全错误的事情,还是这个强大的功能被禁用了?

4

1 回答 1

5

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

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

从v1.9.0 开始,它已被删除。

没有什么可以阻止您根据此处的旧源代码 (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');
于 2013-04-02T11:25:58.713 回答