我想知道你为什么不允许在一个节点上拥有多个类似的eventListener?我想象我有多个相同类型的部分使用单个节点通过CustomEvents相互通信的情况。但这似乎并没有起作用,因为它们都共享相同的EventListener,因此只有其中一个能够监听和处理事件。
为什么?
谢谢!
编辑:小代码片段:
我有
node.addEventListener("customEvent", this.func, false);
和
node.addEventListener("customEvent", this.func, false);
在两个不同的地方,this.func指向相同的功能,但在不同的上下文中,最终会触发不同的事情。但第二个听众永远不会被调用,因为出于某种原因,这个东西似乎假设他们的相同可能是因为签名是相似的或其他什么。
EDIT2:我基本上是指这个。 https://developer.mozilla.org/en-US/docs/Web/API/EventTarget.addEventListener#Multiple_identical_event_listeners
答案 0 :(得分:0)
在Java中,您可以添加多个侦听器。但是,老实说,我不喜欢这种方法。在大多数情况下,您只需触发1个接口/对象(您正在为多个接口添加开销,逻辑,其中只使用一个接口)。
我更喜欢Android方法:setOn ....事件(看起来像JS就是这样)而不是Java的addActionListener(...)。
当您需要多个触发器时,您可以覆盖:
obj.setOnEvent(function() {
doTheOtherEventTrigger();
doOneMoreEventTrigger();
...
}
答案 1 :(得分:0)
您可以使用addEventListener将多个类似的事件处理程序附加到节点。
node.addEventListener("click", function(){alert(1)}, false);
node.addEventListener("click", function(){alert(2)}, false);
应该发出两次警报。 当您指定匿名函数时,这可以正常工作。
但是,您可以使用bind。
指定多个侦听器引用相同的函数和事件var a = this.func.bind();
document.getElementById("start").addEventListener("click", a, false);
var b = this.func.bind();
document.getElementById("start").addEventListener("click", b, false);
这将提醒两次。由于函数包装器不同,因此它被视为一个唯一的事件。
您无法通过node.onclick两次分配事件处理程序,因为它是一个属性。当您分配两次时,它将覆盖第一个处理程序。发明事件听众是为了应对这种情况。