Another question on stackoverflow指出应该可以使用以下命令在所有列表对象上触发事件:
$.event.trigger('customEvent');
然而,在以下示例中,这似乎不适合我:
$('body').bind('customEvent', function(){ alert('Working!'); });
我做错了什么,或者这个功能被禁用了吗?
答案 0 :(得分:5)
看起来该功能已被删除。通过浏览标签,我找到了this TODO in v1.8b1:
// TODO:停止嘲弄数据缓存;删除全局事件并始终附加到文档
自v1.9.0起删除它。
没有什么可以阻止你根据旧的源代码here (v1.6.2)实现它,但看起来它正在与jQuery.cache
进行顽皮的讨论,所以最好不要没有它或者出现它与另一种解决方案
$('*').trigger('customEvent');
也许? (jsFiddle)
或者更有效的方法来跟踪每个订阅并在其上调用.trigger()
。
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');