簡體   English   中英

一次向一個事件注冊一個功能?

[英]Only register a function with an event once?

我有一個jQuery插件,需要注冊click事件處理程序:

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

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

    // Rest of the plugin
});

問題是多個調用多次注冊了該功能。 由於該功能需要保持連接狀態,因此無法使用.one()。

有沒有辦法附加功能? 我可以給它起個名字嗎? 還是我必須使用閉包魔術設置一些布爾標志?

命名事件。

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

有關命名空間事件的更多信息

一種具有良好性能的非常簡單的方法是在body元素上設置一個數據元素:

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

    // do your plugin code here
}

最簡單的可能是您建議的布爾加閉包魔術。 或者,您可以獲取綁定到“ click”對象的所有功能的列表,並查看要附加的功能是否已經存在。

此問題顯示了如何獲取列表。

列出所有使用jquery連接到頁面上的JavaScript事件

不過,在我第一次回應后提出的名稱空間建議可能更簡單。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM