如何让jquery只运行一次

时间:2016-06-07 18:47:07

标签: javascript jquery scope

我有以下代码,当我点击它时,它给了我一个元素的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;
        }
    }
});

3 个答案:

答案 0 :(得分:2)

使用.one()

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

答案 1 :(得分:0)

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

请参阅http://api.jquery.com/unbind/

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

答案 2 :(得分:0)

通过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; }
});