我一直在寻找专门测试特定处理程序(函数)是否绑定(bind)到特定事件的特定对象的方法。
我试图解决的问题是我想将一个处理程序绑定(bind)到一个对象卸载事件,但我想要一种方法来测试它是否已经绑定(bind),所以我没有绑定(bind)它两次。
最佳答案
这是一个对我有用的解决方案。我使用这个 stackoverflow 答案 ( https://stackoverflow.com/a/2518441/2512022 ) 创建了以下函数来测试对象是否具有绑定(bind)到特定事件的特定处理程序。
此函数将对象、事件名称和处理程序函数名称作为输入参数,如果函数绑定(bind)了传入对象上的事件,则返回 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”引用了一个按钮,我们正在测试是否有一个匿名处理程序附加到按钮单击事件
testHandler(this, "click", "anonymous");
关于javascript - 使用 jQuery 实用地测试特定事件处理程序(函数)是否绑定(bind)到对象的事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45448635/