javascript - 使用 jQuery 实用地测试特定事件处理程序(函数)是否绑定(bind)到对象的事件

标签 javascript jquery

我一直在寻找专门测试特定处理程序(函数)是否绑定(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/

相关文章:

javascript - 使用类而不是名称值的 jQuery 验证

javascript - 同时根据多个不同的 ID 将内容加载到表格单元格中

javascript - 切换 Bootstrap 雪佛龙

javascript - 在 codeigniter 中使用 ajax 从另一个页面获取值

javascript - 为相同的 <a> 标签设置不同的超链接(使用 AngularJs)

javascript - 如何将递归回调函数转换为异步等待格式

javascript - 使用 jQuery 将 post 变量添加到表单中

javascript - 使用 Node.JS Web 应用程序打开 Web Analytics。出现错误 'TypeError: doc is null'

javascript - 如何在 Bootstrap 的选项卡中显示链接?

Javascript 模板引擎与 jQuery 一起使用