2013-12-12 192 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]; 
});