在传播期间修改事件数据

nic*_*las 31 javascript jquery events

是否有任何方法将数据附加到jQuery事件对象,因为它传播到DOM?

为了澄清,如果你有三个嵌套的div,每个div都有一个click事件监听器,那么点击最里面的div会导致从最里面到最外面调用所有三个处理程序(事件传播101).我想要做的是在每个处理程序中向事件对象添加一些数据,这些数据库可供下一层访问.

我怎么做?

dig*_*PBK 41

jQuery传递的事件对象是本机事件对象的包装器.冒泡发生在javascript /浏览器级别,因此本机事件对象似乎在所有事件处理程序之间共享.

$('div').click(function(e) {
    e.originalEvent.attribute =  (e.originalEvent.attribute || "") + 
        " " + $(this).prop("className");
    alert(e.originalEvent.attribute);
});
Run Code Online (Sandbox Code Playgroud)

在Chrome,Firefox,Safari,IE9和IE10中测试过.如果您在其他浏览器中测试,请评论结果.

这是小提琴:http://jsfiddle.net/5AQqD/

  • 我刚刚在IE10/9上测试了它,它的工作原理.这应该是正确的解决方案. (2认同)

Jos*_*ber 5

虽然您不能将数据直接附加到事件,但您仍然可以targetElement通过 jQuery将数据附加到data()

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

这是小提琴:http://jsfiddle.net/eKVmU/


ec2*_*011 0

也许我误解了这个问题,但我在寻找一种方法来做同样的事情时遇到了这个 StackOverflow 页面。

我发现您可以返回要在每个处理程序末尾传递的一个或多个值,然后使用该event.result属性在后续处理程序中访问它们?

简单演示位于http://api.jquery.com/event.result/