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".
- Вы можете включать параметры, если вы добавляете обработчик в анонимную функцию