用语法测试特定事件处理程序(函数)是否使用jQuery绑定到对象的事件

我正在寻找专门测试某个处理程序(函数)是否绑定到特定事件上的特定对象的方法。

我试图解决的问题是我想将一个处理程序绑定到一个对象卸载事件,但我想要一种方法来测试它是否已经绑定,所以我没有绑定它两次。

这是一个适合我的解决方案。 我使用此stackoverflow答案( https://stackoverflow.com/a/2518441/2512022 )来创建以下函数来测试对象是否具有绑定到特定事件的特定处理程序。

此函数将Object,Event Name和handler函数名称作为输入参数,如果函数绑定了传入的对象上的事件,则返回true / false。

function testHandler(obj, sEvent, sHandlerName) { var retVal = false; // Get all events bound to object var windowEvents = jQ._data(obj, "events"); // Get all handlers for a specific event var handlers = windowEvents[sEvent]; jQ(handlers).each(function() { // Using passed name to see if there is a match if(this.handler.name === sHandlerName) { retVal = true; return; } }); return retVal; } 

然后按如下方式调用该函数。

 // Test if there is a beforeclose() handler bound to the window objects // "beforeunload" event testHandler(window, "beforeunload", "beforeclose"); 

您甚至可以测试附加到事件的匿名处理程序是否存在。 在下面的调用中,“this”引用了一个按钮,我们正在测试是否有一个匿名hanlder附加到按钮单击事件

 testHandler(this, "click", "anonymous");