如何从侦听器函数中访问已触发事件的名称?

时间:2015-12-23 15:22:22

标签: javascript events javascript-events listener

我增强了一个带有“类”的web-ui,它充当多个可能事件和多个可能的侦听器之间的中介,而不仅仅是一个。中介对象在事件上注册自己的特殊函数作为普通侦听器本身,然后它可以遍历所有可能的侦听器。如果在调解器启动之前已经在事件上注册了一个侦听器,它将被放入类似于其他注册器侦听器的调解器对象内部列表中,从而在任何已注册的事件上调用它。

因为如果给定事件有任何侦听器,则介体对象会接收所有先前的侦听器,它将全部调用它们。即使它不是原始事件,它也会激活,但是其他一些事件也会在中介对象上注册。

为了防止这种情况,我需要知道导致其侦听器被调用的事件。例如。当window.onclick开火时,我想知道它是window.onclick。到目前为止我所拥有的是触发事件的对象(通过this-keyword),在这种特殊情况下是window。如何访问此信息,是否可以作为跨浏览器解决方案?

说明如何使用这个不祥的调解员“类”,也称为CallbackHandler

// potential listener-functions
var callMeBaby = function () { console.log("Ya called me, Baby!"); };
var callMeWilhelm = function () { console.log("Ya called me, Wilhelm!"); };
var callMeMaybe = function () { console.log("Ya called me, maybe..."); };

// first listener assigned
window.onclick = callMeBaby;

// create 2 CallbackHandler-objects
// they use the same event window.onclick
// myButton.onclick is registered on anotherCH exlusively
// the previous listener window.onclick = callMeBaby will be included in windowOnClickCH
// windowOnClickCH.callback (the new listener) will replaced by anotherCH.callback as well
var windowOnClickCH = new Utilities.CallbackHandler();
windowOnClickCH.addSender(window, "onclick");
var anotherCH = new Utilities.CallbackHandler();
anotherCH.addSender(window, "onclick");
anotherCH.addSender(document.getElementById("myButton"), "onclick");

// register callback-function on the CallbackHandler-objects
windowOnClickCH.addReceiver(callMeWilhelm);
anotherCH.addReceiver(callMeMaybe);

这将导致这些控制台日志更少:

Ya called me, Baby!
Ya called me, Wilhelm!
Ya called me, maybe...

提前谢谢!

1 个答案:

答案 0 :(得分:0)

您想要使用事件对象的currentTarget属性。 “Event.currentTarget标识事件的当前目标,因为事件遍历DOM。它总是引用事件处理程序附加到的元素。”
有关详细信息,请参阅此链接:https://developer.mozilla.org/en-US/docs/Web/API/Event/currentTarget