2013-05-10 51 views
0

$.ready()我宣佈一個click功能如下圖所示如何以編程方式刪除附加的jQuery函數?

$(document).ready(function(){ 
    $("#btnClk").click(function(clkevent){ 
     //Doing Something Here 
     clkevent.preventDefault(); 
    }); 

}); 

我想刪除這個click()$("#btnClk")在另一個JavaScript函數。我怎樣才能做到這一點?

+0

所有你需要的是信息在http://api.jquery.com/off/ – Alnitak 2013-05-10 07:04:21

+0

谷歌之前小貼士發佈在這裏。 – kbvishnu 2013-05-10 07:16:53

+0

@VeeKayBee我搜索谷歌。結束「解除綁定」功能。但我想刪除只有一個或兩個功能。 – 2013-05-10 07:36:25

回答

1

建議的解決方案的問題之一是它們刪除所有註冊的點擊事件處理程序,這可能不是所期望的。

對此的解決方案是將處理方法進行分離,以通過兩者的參與方法共享,然後使用具有.off()沿着方法的共同參考範圍,以解決此

function btnclickHandler(clkevent){ 
    //Doing Something Here 
    clkevent.preventDefault(); 
} 

$(document).ready(function(){ 
    $("#btnClk").click(btnclickHandler); 
}); 

$("#btnClk").off('click', btnclickHandler); 
+0

off()方法從api.jQuery.com中移除使用.on()附加的事件處理程序。這裏沒有附上on(),任何probs? – 2013-05-10 07:34:51

+0

@SubinJacob它不會引起問題,因爲'.bind()'目前(幾乎)與'.on()'同義。 – Alnitak 2013-05-10 07:44:26

0

您可以使用unbind

$('#btnClk).unbind('click'); 

almost same question

+0

'.unbind'是這樣做的過時的方式 – Alnitak 2013-05-10 07:03:17

+0

我是一個老派的傢伙.. http://stackoverflow.com/a/16476792/779158請檢查這個新的解決方案。我不想在我的答案中複製他的答案。感謝您的評論。 – rahularyansharma 2013-05-10 07:05:05

1

舊學校

$("#btnClk").unbind('click'); 

新學校

$("#btnClk").off('click'); 
+2

這將刪除所有處理程序,如果有其他人添加。如果這不合乎要求,則必須傳遞要移除的處理程序,或使用事件命名空間 – 2013-05-10 06:58:15

0

可以使用off()做到這一點:

$('#btnClk').off('click'); 

這將刪除btnClk中的所有單擊事件處理程序。

1

註冊您應該使用.on('click', ...)代替.click點擊處理器 - 後者可能會產生混淆,因爲同樣的功能也可以用來觸發 click事件。

註銷處理程序,使用.off('click')

請參閱告誡在http://api.jquery.com/off/關於函數處理,名字空間等(我的重點):

如果一個簡單的事件名稱,如「單擊「提供,該類型的所有事件(包括直接和委託)都從jQuery集合中的元素中刪除。

處理程序也可以通過在處理程序中的參數指定的函數名中移除。

注意,在後一種情況下,如果功能從來沒有在第一時間有一個名字,因爲在問題的代碼,其中處理器是匿名功能,您可以不指定函數名。

相關問題