2017-01-06 60 views
1

我在代码中有一个按钮,我需要停止其他事件点击此按钮,但我需要其他事件仍然绑定。JQuery取消其他事件

代码:

var cancel = true; 

$("#btn").on("click", function(ev) { 
    console.log("FIRST CLICK"); 
}); 

$("#btn").on("click", function(ev) { 
    console.log("SECOND CLICK"); 
    if(cancel) { 
     --- cancel first click--- 
    } 
}); 

用法:

cancel = true; 
$("#btn").click(); 
cancel = false; 
$("#btn").click(); 

预期输出:

SECOND CLICK 

FIRST CLICK 
SECOND CLICK 

我已经尝试

ev.stopImmediatePropagation(); 
ev.stopPropagation(); 
ev.preventDefault(); 
return false; 

但是这项工作中的任何一项,我如何阻止其他所有未绑定的点击事件?

+1

如果第一个首先连接,还有你能真正做到....你可以代替鼠标按下绑定点击并停止它什么都没有。或者你可以挂接其他事件来使用eventDelegation ...或者你可以重写jQuery如何添加事件,以便你可以绑定你的第一个事件。 – epascarello

+1

我不明白你想达到什么目的?你的事件会发生什么?你是否希望在按钮2的动作实际上正在进行的时候点击按钮1?将click事件绑定两次到同一个id也没有意义。请使用开关块或if/else。 –

+0

你想取消还是可以删除其他事件处理程序? –

回答

3

的.off jQuery的方法是去的方式,我认为

$("#btn").on("click", function(ev) { 
console.log("FIRST CLICK"); 
}); 

$("#btn").on("mousedown", function(ev) { 
console.log("SECOND CLICK"); 
--- cancel first click--- 
$("#btn").off('click'); 
$("#btn").text("Anything you want to do"); 
// then if you need to rebind you can do 
$("#btn").on("click", function(ev) { 
console.log("FIRST CLICK"); 
}); 
}); 

所以你解除绑定运行的代码重新绑定。但我想回答你的问题是,`$(函数(){

var cancel= 'true'; 
$("#btn").on("click",function(e){ 
      if(cancel == 'true'){ 
    cancel = 'false'; 
}else{ 
    cancel = 'true'; 
} 
      }); 

}); 

对不起,压痕,但这将切换取消开/关 我认为这是预期的目标。当你点击的按钮,它会为假为真或真切换到假的。

+0

我喜欢那一个:)但我不明白他真的想实现什么 –

+0

我认为第一个代码可以处理某些事情,但是如果第二个代码可以触发,他必须覆盖它 – NotanNimda

+0

几乎是这样,但是这个解除绑定其他点击 – gFontaniva

1

一种解决办法是仔细介意为了的事件绑定。通过首先结合更重要的点击,我们可以stopImmediatePropagation()取消任何后续的绑定。

$("#btn").on("click", function(e) { 
    e.stopImmediatePropagation(); 
    console.log("Reversed second click"); 
}); 
$("#btn").on("click", function(e) { 
    console.log("Reversed first click"); 
}); 

$("#btn").on("click", function(e) { 
 
    console.log("First click"); 
 
}); 
 
$("#btn").on("click", function(e) { 
 
    e.stopImmediatePropagation(); 
 
    console.log("Second click"); 
 
}); 
 

 
$("#btn2").on("click", function(e) { 
 
    e.stopImmediatePropagation(); 
 
    console.log("Reversed second click"); 
 
}); 
 
$("#btn2").on("click", function(e) { 
 
    console.log("Reversed first click"); 
 
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<button id="btn"> 
 
    Something 
 
</button> 
 
<button id="btn2"> 
 
    Reversed Order 
 
</button>