2014-03-06 66 views
7

我想在触发事件时删除事件处理程序。我不能使用one(),因为有些情况下我不想删除事件处理程序。这就是我的意思是:删除JQuery中的当前事件处理程序?

$('#a').on('click',function(){ 
    if(...) 
    // remove current event handler 
}); 

编辑:我忘了提,有连接到$('#a')其他事件处理程序。我只想删除当前的一个。

+0

尝试在Google中写入相同的问题 – sanjeev

回答

20

使用.off(),名称为间隔event names

$('#a').on('click.myevent', function() { 
    if (...) 
    // remove current event handler 
    $(this).off('click.myevent') 
}); 
+0

什么是'click.myevent'。请链接我描述的链接... –

+1

@RajaprabhuAravindasamy它是[namespaced event names](http://api.jquery.com/on/#event-names) - 用于确保我们不会解除绑定其他单击事件处理程序 –

+0

这将删除具有该名称空间的所有事件。这意味着'myevent'必须是唯一的标识符。 –

-1

能否请您试试这个:

$('#a').on('click',function(){ 
    if(...) 
    { 

    $(this).unbind('click'); or $(this).off('click') 
}  

}); 

绑定和取消绑定是为了向后兼容。你应该开/关分离或附加的事件处理程序

希望这有助于..

+2

这将删除所有'click'事件处理程序。 OP只想删除特定的处理程序。 – toxalot

6

内本身解除绑定的事件处理程序:

$("#a").on("click", function(evt){ 
    if (...) 
    { 
     $(this).off(evt); 
    } 
}); 

它不是在.off()很好的记录,但是您可以从.unbind()的“使用事件对象”一节中阅读关于此“第三种形式”的更好解释。