&引用;涓流;自定义JavaScript事件
我正在研究JavaScript中的自定义事件 根据MDN,使用CustomEvent构造函数,可以选择使事件“冒泡”(默认为false): 例如:&引用;涓流;自定义JavaScript事件,javascript,events,dom,Javascript,Events,Dom,我正在研究JavaScript中的自定义事件 根据MDN,使用CustomEvent构造函数,可以选择使事件“冒泡”(默认为false): 例如: // add an appropriate event listener obj.addEventListener("cat", function(e) { process(e.detail) }); // create and dispatch the event var event = new CustomEvent("cat", {"det
// add an appropriate event listener
obj.addEventListener("cat", function(e) { process(e.detail) });
// create and dispatch the event
var event = new CustomEvent("cat", {"detail":{"hazcheeseburger":true}});
obj.dispatchEvent(event);
我在JSFIDLE上测试了它:
泡泡功能似乎也能起作用。但我希望我的自定义事件是“滴流”,即触发子元素的侦听器;与冒泡相反
我隐约记得一些默认的浏览器事件“滴流”。这应该是早期浏览器的争论点之一
不管怎样,有没有办法在我的自定义事件上获得此功能?当然,任何相对简单直接的方法。我真的不想编写一个函数来遍历所有子元素并手动触发它们上的任何侦听器。我希望有另一种方法。您正在寻找的行为称为
事件捕获
(与事件冒泡
相反)。通过将true
作为第三个参数传递给addEventListener
,可以启用事件捕获
见:
注意:事件捕获
在IE 8或更低版本中不受支持
有关更多信息,请参阅:谢谢。虽然一开始听起来确实是正确的答案,但这并不是我想要的。我的代码是“二”,“一”,你的代码是“一”,“二”。我想要的结果是“二”,“四”。无论如何,在任何情况下这听起来都很复杂,在我的情况下,我认为最简单的解决方案是一个自定义“事件总线”,我可以将侦听器挂接到该总线上并触发自定义事件。@Rolf你的意思是让四个成为两个的孩子吗?无论哪种方式,在使用事件捕获时将事件绑定到document.querySelector(“#two*”)
是否有效?这将击中一个
,两个
,和四个
。然后,您可以检查处理程序的内部,查看event.target
是否是event.currentTarget
的父级。如果是,则事件为“有效”。如果不是,则为“无效”,应忽略。这将使您只获得2个
和4个
。更正:然后您可以检查处理程序内部,查看2个
是否是e.currentTarget的父级或等于e.currentTarget
。如果是,则事件为“有效”。如果不是,则为“无效”,应忽略。e、 g.:(显然,这可以被重构得更干净)我想让事件在子节点上“滴流”。我认为这会发生在一些默认事件中。我放弃了定制事件的滴流式或气泡式处理,只使用“事件总线”类在全局范围内注册和触发我的定制事件,而不用太担心事件传播。我认为它具有您描述的功能。