JQuery эквивалент JavaScript addEventListener метода

Я пытаюсь найти эквивалент jQuery этого вызова метода JavaScript:

document.addEventListener('click', select_element, true);

Я дошел до:

$(document).click(select_element);

но это не дает того же результата, что и последний параметр метода JavaScript - логическое значение, указывающее, должен ли выполняться обработчик события на этапе захвата или барботажа (на мое понимание из http://www.quirksmode.org/js/events_advanced.html) - не учитывается.

Как указать этот параметр или иным образом достичь той же функции, используя jQuery?

Ответ 1

Не все браузеры поддерживают захват событий (например, версии Internet Explorer менее 9 не поддерживают), но все поддерживают барботирование событий, поэтому это фаза, используемая для привязки обработчиков к событиям во всех абстракциях между браузерами, Включен jQuery.

Ближайший к тому, что вы ищете в jQuery, использует bind() (заменяется on() в jQuery 1.7+) или специфичные для события методы jQuery (в этом случае click(), который в любом случае вызывает bind() внутренне). Все используют фазу барботирования поднятого события.

Ответ 2

Как и в jQuery 1.7, .on() теперь является предпочтительным методом привязки событий, а не .bind():

Из http://api.jquery.com/bind/:

Как и в jQuery 1.7, метод .on() является предпочтительным методом для прикрепление обработчиков событий к документу. Для более ранних версий .bind() используется для привязки обработчика события непосредственно к элементы. Обработчики привязаны к выбранным в данный момент элементам в объект jQuery, поэтому эти элементы должны существовать в точке вызова to.bind(). Для более гибкой привязки событий см. Обсуждение делегирования событий в .on() или .delegate().

Страница документации находится по адресу http://api.jquery.com/on/

Ответ 3

Ближайшей задачей будет функция bind:

http://api.jquery.com/bind/

$('#foo').bind('click', function() {
  alert('User clicked on "foo."');
});

Ответ 4

Следует отметить, что методы событий jQuery не запускают/ловушки load на тегах embed, которые содержат SVG DOM, который загружается как отдельный документ в тег embed. Единственный способ, с помощью которого я нашел ловушку в событии load, заключался в использовании необработанного JavaScript.

Это не сработает (я пробовал методы on/bind/load):

$img.on('load', function () {
    console.log('FOO!');
});

Однако это работает:

$img[0].addEventListener('load', function () {
    console.log('FOO!');
}, false);

Ответ 5

Теперь вы должны использовать функцию .on() для привязки событий.

Ответ 6

Вот отличный подход к Mozilla Development Network (MDN) этой проблемы для стандартного JavaScript (если вы не хотите полагаться на jQuery или лучше понимать его вообще):

https://developer.mozilla.org/en-US/docs/DOM/element.addEventListener

Вот обсуждение потока событий из ссылки в приведенном выше обращении:

http://www.w3.org/TR/DOM-Level-3-Events/#event-flow

Некоторые ключевые моменты:

  • Он позволяет добавлять более одного обработчика события
  • Это дает вам более тонкое управление фазой, когда слушатель активируется (захват против пузырьков)
  • Он работает с любым элементом DOM, а не только с HTML-элементами
  • Значение "this", переданное в событие, не является глобальным объектом (окном), а элементом, из которого выполняется этот элемент. Это очень удобно.
  • Код для устаревших браузеров IE прост и включен в заголовок "Устаревший Internet Explorer и attachEvent".
  • Вы можете включать параметры, если вы добавляете обработчик в анонимную функцию