【问题标题】:how to make jquery run only once [duplicate]如何使jquery只运行一次[重复]
【发布时间】:2016-06-07 18:47:06
【问题描述】:

我有以下代码,当我单击它时,它会为我提供一个元素的 id。我希望这只是在我单击一个元素时给我一个元素的 ID,而不是在我单击第二个元素时。

$("svg").click(function() {
    if(this.id!='main_svg') {
        divs[1]=this.id;
    }
});

我正在考虑使用带有 if 条件的标志变量,但我想知道是否有比下面的更好的解决方案

Var flag = 0;
if($flag==0){
    $("svg").click(function() {
        if(this.id!='main_svg') {
            alert("second.one "+this.id); 
            divs[1]=this.id;
            flag=1;
        }
    }
});

【问题讨论】:

    标签: javascript jquery scope


    【解决方案1】:

    使用.one()

    $("svg").one("click", function() {
      if(this.id!='main_svg')   {
      divs[1]=this.id;
     }
    });
    

    【讨论】:

    • 对于您的问题,这是我认为的最佳解决方案
    【解决方案2】:

    您可以在使用后取消注册点击处理程序。

    http://api.jquery.com/unbind/

    编辑:看来您的问题应该改写为“如何让 jquery 为特定元素运行”,为了让它为一个元素的 id 运行,请将您的选择器从 $("svg") 更改为 $("#main_svg")

    【讨论】:

      【解决方案3】:

      通过off()显式删除事件处理程序

      通常,您可以在通过 .off() 函数之后删除事件处理程序,在您的情况下,它将在最初调用它之后进行处理:

      $("svg").click(function() {
         if(this.id != 'main_svg')   {
            divs[1]=this.id;
         }
         // Kill event handler here
         $('svg').off('click');
      });
      

      使用:one() 确保最多执行一次

      一种首选方法可能是考虑使用.one() 函数,该函数专门用于处理这种情况:

      one():将处理程序附加到元素的事件。每个事件类型的每个元素最多执行一次处理程序。

      将用作:

      $("svg").one("click", function() {
           if(this.id!='main_svg'){ divs[1]=this.id; }
      });
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-02-26
        • 2013-01-08
        • 1970-01-01
        • 2021-12-24
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多