Изменять данные о событиях во время распространения
Есть ли какой-либо способ привязки данных к объекту события jQuery при его распространении по DOM?
Чтобы уточнить, есть ли у вас три вложенных div, каждый из которых имеет прослушиватель событий щелчка, а затем нажатие на самый внутренний div приводит к тому, что все три обработчика вызываются от самого внутреннего до самого внешнего (распространение 101 событий). То, что я хотел бы сделать, это добавить некоторые данные в объект события в каждом обработчике, доступном для следующего слоя вверх. Как мне это сделать?
Спасибо.
Ответы
Ответ 1
Возможно, я неправильно понял вопрос, но наткнулся на эту страницу StackOverflow, ища способ сделать то же самое.
С тех пор я обнаружил, что вы можете вернуть значение/значения, которые вы хотите передать в конце каждого обработчика, а затем получить к ним доступ в последующих обработчиках, используя свойство event.result
?
Простая демонстрация в http://api.jquery.com/event.result/
Ответ 2
Объект события, который передается jQuery, является оболочкой вокруг собственного объекта события. Распутывание происходит на уровне javascript/browser, и, следовательно, собственный объект события, по-видимому, распределяется между всеми обработчиками событий.
$('div').click(function(e) {
e.originalEvent.attribute = (e.originalEvent.attribute || "") +
" " + $(this).prop("className");
alert(e.originalEvent.attribute);
});
Протестировано в Chrome, Firefox, Safari, IE9 и IE10. Если вы протестируете в других браузерах, прокомментируйте результаты.
Здесь скрипка: http://jsfiddle.net/5AQqD/
Ответ 3
Хотя вы не можете прикреплять данные непосредственно к событию, вы все равно можете привязать данные к targetElement
через jQuery data()
:
$('div').click(function(e) {
var info = $(e.target).data('info') || '';
$(e.target).data('info', info + ' ' + $(this).attr('class'));
});
Здесь скрипка: http://jsfiddle.net/eKVmU/