Подтвердить что ты не робот

Изменять данные о событиях во время распространения

Есть ли какой-либо способ привязки данных к объекту события jQuery при его распространении по DOM?

Чтобы уточнить, есть ли у вас три вложенных div, каждый из которых имеет прослушиватель событий щелчка, а затем нажатие на самый внутренний div приводит к тому, что все три обработчика вызываются от самого внутреннего до самого внешнего (распространение 101 событий). То, что я хотел бы сделать, это добавить некоторые данные в объект события в каждом обработчике, доступном для следующего слоя вверх. Как мне это сделать?

Спасибо.

4b9b3361

Ответ 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/