изменить данные события во время распространения - PullRequest
29 голосов
/ 19 августа 2011

Есть ли способ прикрепить данные к объекту события jQuery, когда он распространяется по DOM?

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

Как мне это сделать?

Ответы [ 3 ]

41 голосов
/ 19 августа 2013

Объект события, который передается 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/

4 голосов
/ 19 августа 2011

Хотя вы не можете прикрепить данные непосредственно к событию, вы все равно можете прикрепить данные к targetElement через jQuery's data():

$('div').click(function(e) {
    var info = $(e.target).data('info') || '';
    $(e.target).data('info', info + ' ' + $(this).attr('class'));
});

Вот скрипка: http://jsfiddle.net/eKVmU/

1 голос
/ 13 марта 2014

Возможно, я неправильно понял вопрос, но я наткнулся на эту страницу StackOverflow, когда искал способ сделать то же самое.

С тех пор я обнаружил, что вы можете возвращать значение / значения, которые вы хотите передать в конце каждого обработчика, и затем обращаться к ним в последующих обработчиках, используя свойство event.result?

Простая демонстрация на http://api.jquery.com/event.result/

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...