Невозможно прослушивать глобальное событие в jQuery

qaru.site/info/350846/... указал, что должно быть возможно инициировать событие для всех списков объектов, используя:

$.event.trigger('customEvent');

Однако это не работает для меня в примере вроде:

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

Я делаю что-то совершенно не так, или эта прекрасная функциональность отключена?

Ответы

Ответ 1

Похоже, что эта функция была удалена. Просматривая теги, мне удалось найти этот TODO в v1.8b1:

//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');