У меня возникла проблема с пользовательским событием jQuery и прослушиванием его через делегирование в зависимости от того, как инициируется событие. Строковое событие корректно запускается на обоих тэгах. Однако объект jQuery.Event запускается только при непосредственном связанном теге p. Я подготовил скрипку, чтобы продемонстрировать: http://jsfiddle.net/s35bg/jQuery пользовательское событие через объект не запускается
Вот HTML:
<p class="delegation">Via delegation:</p>
<p class="direct">Directly:</p>
И JavaScript:
$(function() {
// bind using delegation
$(document).on('create', 'p.delegation', function (e) {
if (e.test) {
$(this).append(' $.Event');
} else {
$(this).append(' string');
}
});
// bind directly
$('p.direct').on('create', function (e) {
if (e.test) {
$(this).append(' $.Event');
} else {
$(this).append(' string');
}
});
// trigger the event with a string
$('*').trigger('create');
// trigger the event with an object
var event = $.Event('create');
event.test = true;
$('*').trigger(event);
});
Результат:
Via delegation: string
Directly: string $.Event
Я ожидаю:
Via delegation: string $.Event
Directly: string $.Event
Мой вопрос в том, почему это так? Являются ли мои ожидания неправильными или неправильно jQuery? Заранее спасибо!
Я думаю, что есть ключ в том, что если вы измените триггер '$ ('*')' в '$ ('p') ', результатом является:' Через делегирование: string $ .Event $ .Event', как будто событие запускается как непосредственно, так и на пузыре. Я признаю, что я озадачен, но мне интересно о взаимодействии между триггером(), селектором '' * ''и делегированными событиями. – Palpatim
@ Палпатим, который, на мой взгляд, тоже удивляет. – morris4