Javascript 只向事件注册一次函数?

Javascript 只向事件注册一次函数?,javascript,jquery,Javascript,Jquery,我有一个jQuery插件,需要注册一个点击事件处理程序: $.fn.myPlugin = function (options) { var settings = { // snipped }; $.extend(settings, options || {}); $("body").click(function () { // Do Something }); // Rest of the plugin }); 问

我有一个jQuery插件,需要注册一个点击事件处理程序:

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

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

    // Rest of the plugin
});
问题是多个调用多次注册函数。由于该函数需要保持连接,因此无法使用.one()


如果已经附加了函数,有没有办法?我能给它起个名字吗?或者我必须使用闭包魔术设置一些布尔标志吗?

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

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

    // do your plugin code here
}

为事件命名名称空间

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

.

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

这个问题显示了如何获取列表


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

Hehe,see工作得很有魅力!这基本上允许我用一个名称来引用我的事件,这消除了任何歧义。作为对后续事件的提醒:重要的是使用click.XXX语法,jQuery仍然将其绑定到click事件。我使用了myPlugin.doClick和myPlugin.click,但它不起作用。事后看来很明显,但却给我带来了几分钟的麻烦:)只是为了记录在案,不是我投了反对票。可以说它只是一个奇特的全局变量,但它正是它的本意:元素上的标记。