2013-12-12 248 views
0

如何刪除附加到DOM元素的所有事件,但使用jquery的元素除外?刪除除元素之外的所有元素

例如,我有一個下拉<select>,它有附加到它的各種事件(比如點擊,雙擊,更改等)。我想要實現的只是將change事件應用於它並刪除所有其他事件。我怎樣才能做到這一點?

P.S我不知道附着在單元

+0

是所有使用jQuery附加事件處理程序的? –

+0

http://api.jquery.com/off/。 – Andy

+0

@AnthonyGrist是的。 –

回答

0
$("#foo").unbind("click"); 

填寫其餘的事件。 http://api.jquery.com/unbind/

+1

如果他們自己添加事件處理程序,並因此知道需要刪除的類型,他們可以只是,如果他們實際上並不需要它們,就可以*添加它們。似乎有理由認爲他們想從給定元素中刪除任意和未知的事件類型集合。 –

+0

這不是關於處理程序,而是事件本身。假設你有一個你可以點擊的按鈕。用我的例子,你可以刪除點擊事件。現在,該按鈕只是一個不會執行任何操作的普通元素(如果可以觸發click事件,則會看到該UI類型的事件)。所以它更像一個視覺事物,而不是代碼處理。 – douweegbertje

+0

這完全不正確。 jQuery用於註冊事件*處理程序* - 當給定類型的事件由該元素(或其中傳播事件的元素)註冊時執行的代碼。 jQuery'unbind'函數刪除使用jQuery *從該元素添加的事件處理程序*,但該類型的事件仍被註冊;你的按鈕仍然是一個按鈕,如果你調用'.unbind('click');'就可以點擊它;該點擊不會執行任何額外的代碼,你說應該使用jQuery運行時發生。 –

0
$("#foo").off(); 

將去除附着到foo元素

你也可以做的所有事件:

$("#foo").off("click dblclick"); 

你可以再附上FOO元素只onchange事件上

$("#foo").on("change",function(){ 
    //Do stuff here 
}) 
+0

他們不想刪除*全部*事件,他們想要刪除除特定類型以外的所有事件。 –

+0

@瑞奇請先閱讀問題。我不想刪除所有的事件。 –

+0

@Kamran Ahmed如果你不知道有多少元素,你可以刪除元素中的所有事件,然後只附加你想要的元素 –

0

五月你可以使用類似於:

$.(selector).on('*',function(e) 
{ 
if(e.which='value_for_your_event_eg._14_for_tab') 
return true; 
else 
return false; 
}) 

我不知道,我不是專家,但我想這會奏效。

0

$._data(elem,'events')是不公開支持的方法:

DEMO

$.each($._data($('select').get(0),'events'),function(k){ 
    if(k !== "change") 
     delete $._data($('select').get(0),'events')[k]; 
});