2017-01-06 61 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>