Я пытаюсь создать jQuery.on() (ex-live()) для привязки нескольких событий. Он работает для элементов, которые существуют на document.ready, но если я динамически добавляю вторую ссылку после загрузки страницы, мой обработчик событий не запускается.
Это имеет смысл, поскольку метод внешнего метода выполняет итерации по элементам, и doenst прослушивает недавно добавленные узлы DOM и т.д..on(..) - это то, что прослушивает новые узлы DOM, но требует параметров имени события, которого у меня нет, пока у меня не будет DOM node.
Похоже на цыпленок и ситуацию с яйцом.
Мысли?
<a href="/foo.html" class="js-test" data-test-events="['click', 'mouseover']">Test 1</a>
<a href="/foo.html" class="js-test" data-test-events="['mouseout']">Test 2</a>
$(function() {
$('.js-test').each(function() {
var $this = $(this);
var e, events = $this.data('test-events');
for(e in events) {
$this.on(events[e], function() {
console.log("hello world!")
});
}
});
});
Обновление. Кажется, что работает следующее: $(this), похоже, не находится в правильной области.
<a href="/foo.html" class="js-test" data-test-events="click mouseover">Test 1</a>
<a href="/foo.html" class="js-test" data-test-events="mouseout">Test 2</a>
$(function() {
$('.js-test').on($(this).data('test-events'), function() {
// call third party analytics with data pulled of 'this'
});
});
Обновление 1:
Я считаю, что лучшим вариантом будет создание специальных методов .on для всех методов, которые я хочу поддерживать так:
$(document).on('click', '.js-test[data-test-events~="click"]' function(event) {
record(this, event);
});
$(document).on('mouseover', '.js-test[data-test-events~="mouseover"]', function(event) {
record(this, event);
});
... etc ...