在传播期间修改事件数据
是否有任何方法将数据附加到jQuery事件对象,因为它传播到DOM?
为了澄清,如果你有三个嵌套的div,每个div都有一个click事件监听器,那么点击最里面的div会导致从最里面到最外面调用所有三个处理程序(事件传播101)。 我想要做的是向每个处理程序中的事件对象添加一些数据,这些数据可以被下一层访问。
我怎么做?
也许我误解了这个问题,但我遇到了这个StackOverflow页面,同时寻找一种方法来做同样的事情。
我发现你可以在每个处理程序的末尾返回你想要传递的值/值,然后使用event.result
属性在后续处理程序中访问它们?
jQuery传递的事件对象是本机事件对象的包装器。 冒泡发生在javascript /浏览器级别,因此本机事件对象似乎在所有事件处理程序之间共享。
$('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/
虽然您无法直接将数据附加到事件,但仍可以通过jQuery的data()
将数据附加到targetElement
:
$('div').click(function(e) { var info = $(e.target).data('info') || ''; $(e.target).data('info', info + ' ' + $(this).attr('class')); });
这是小提琴: http : //jsfiddle.net/eKVmU/