JQuery слушает глобально для пользовательских событий - PullRequest
9 голосов
/ 20 марта 2012

Упрощенная версия того, что я пытаюсь сделать:друг с другом.Это возможно?Мое единственное решение на данный момент - привязать слушателя и событие к телу ... это кажется неаккуратным - есть ли лучший способ?

1 Ответ

21 голосов
/ 20 марта 2012

В JavaScripts события, запускаемые на каждом элементе HTML, передаются их родителям, поэтому, чтобы решить вашу проблему и сделать любой элемент способным обрабатывать пользовательское событие, не совершая что-то неправильное, например, $('*').bind('custom-event') означает привязать слушателя к общий родительский элемент для всех элементов, body или html элементов:]

Итак, вам нужно только привязать событие к элементу body или html. Затем, когда какой-либо элемент внутри выбранного родительского элемента вызовет пользовательское событие, он будет распространен на этот родительский элемент.

И затем в обработчике события вы можете получить доступ к элементу, который вызвал событие, путем доступа к атрибуту target для объекта события: event.target

Итак, код должен быть:

$('body').bind('custom-event', function(e){
  var $element = e.target;
});

$('#anyElement').trigger('custom-event');
...