只用一次事件注册一个函数?

时间:2010-11-03 17:19:15

标签: javascript jquery

我有一个需要注册click事件处理程序的jQuery插件:

$.fn.myPlugin = function (options) {
    var settings = {
        // snipped
    };
    $.extend(settings, options || {});

    $("body").click(function () {
      // Do Something
    });

    // Rest of the plugin
});

问题是多次调用多次注册该函数。由于函数需要保持附加,我不能使用.one()。

如果已附加功能,有没有办法?我可以给它起个名字吗?或者我是否必须使用闭合魔法设置一些布尔标志?

3 个答案:

答案 0 :(得分:3)

命名空间您的活动。

$('body').unbind('click.myPlugin').bind('click.myPlugin', function() {
   ..code...
});

More on Namespaced Events

答案 1 :(得分:1)

一个性能良好的非常简单的方法是在body元素上设置数据元素:

if (!$.data(document.body, 'myPluginRegistered') {
    $.data(document.body, 'myPluginRegistered', true);

    // do your plugin code here
}

答案 2 :(得分:0)

最简单的可能是你建议的布尔加封闭魔法。或者,您可以获取绑定到“click”对象的所有函数的列表,并查看您附加的函数是否已经存在。

此问题显示了如何获取列表。

List all javascript events wired up on a page using jquery

尽管如此,在我第一次回复之后出现的命名空间建议可能更简单。