Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/408.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/76.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 在传播期间修改事件数据_Javascript_Jquery_Events - Fatal编程技术网

Javascript 在传播期间修改事件数据

Javascript 在传播期间修改事件数据,javascript,jquery,events,Javascript,Jquery,Events,当jQuery事件对象向上传播DOM时,是否有任何方法将数据附加到它 为了澄清这一点,如果有三个嵌套的div,每个div都有一个click事件侦听器,那么单击最里面的div将导致从最里面到最外面调用所有三个处理程序(事件传播101)。我想做的是向每个处理程序中的事件对象添加一些数据,这些数据可供上一层访问 如何实现这一点?尽管您不能直接将数据附加到事件,但仍然可以通过jQuery的data()将数据附加到targetElement: 这里有一个问题:jQuery传递的事件对象是本机事件对象的包装

当jQuery事件对象向上传播DOM时,是否有任何方法将数据附加到它

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


如何实现这一点?

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


这里有一个问题:

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

$('div').click(function(e) {
    e.originalEvent.attribute =  (e.originalEvent.attribute || "") + 
        " " + $(this).prop("className");
    alert(e.originalEvent.attribute);
});
在Chrome、Firefox、Safari、IE9和IE10中测试。如果您在其他浏览器中进行测试,请对测试结果进行评论


问题是:

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

我发现您可以返回希望在每个处理程序末尾传递的值,然后使用
事件.result
属性在后续处理程序中访问它们


此解决方案在第一次触发事件时起作用,但数据通过多个事件持续存在(在JSFIDLE上,尝试单击多次,看看会发生什么)。我真的很想找到一种方法,在数据冒泡时将数据与特定的点击关联起来,而不是与特定的元素关联起来…@josh-为什么不在数据碰到最外层的元素时删除它呢。否决,因为它没有回答OP提出的问题:“将数据附加到jQuery事件对象”。投票数第二高的答案正好如此,应该排在第一位,而被接受的答案…同意这不是理想的解决方案-修改原始事件应该是被接受的答案。我刚刚在IE10/9上测试了这一点,它是有效的。这应该是正确的解决方案。糟糕,没有IE8支持。这正是我需要的,谢谢。这应该记录在MDN上。如果事件是用javascript触发的,这将破坏js(OriginaleEvent将是未定义的)。@nils javascript中的每个对象都是
expando
对象,也就是说,您可以随意附加任何内容。这不是事件系统的一个特性,而是JavaScript的一个特性,可以以这种特殊的方式使用。我不相信这是正确的答案。在事件上升到DOM的更高层之后,它对我不起作用。
$('div').click(function(e) {
    e.originalEvent.attribute =  (e.originalEvent.attribute || "") + 
        " " + $(this).prop("className");
    alert(e.originalEvent.attribute);
});