Javascript 如何从元素中分离jquery事件(函数)
如果我的ajax请求成功,我想删除此单击事件:Javascript 如何从元素中分离jquery事件(函数),javascript,jquery,events,Javascript,Jquery,Events,如果我的ajax请求成功,我想删除此单击事件: $('.el a').live('click', function(event){ event.preventDefault(); $.ajax({ url: $(this).attr('href'), type: 'GET', success: function(response){ // how to detach this function here?
$('.el a').live('click', function(event){
event.preventDefault();
$.ajax({
url: $(this).attr('href'),
type: 'GET',
success: function(response){
// how to detach this function here? (the live click event)
}
});
});
我想你想要:
.unbind("click");
或者在jQuery1.7中+
.off("click");
注意:这将从单击的元素中删除click
事件;如果要阻止新创建的元素发生单击事件(即禁用live()
方法),则需要执行以下操作:
$('.el a').die("click");
使用unbind这可以通过使用.unbind()
来完成,但不能从ajax类的success函数内部使用此
,因为它将引用来自函数回调的不同对象,然后是您单击的元素,而是创建一个存储单击的元素的变量;在本例中,我使用了elem
,并使用它在成功时解除单击事件的绑定$(elem)代码>
Edit:@mu太短了,在1.7之前的早期版本中,它明显地指出,杀死.live()设置的事件比杀死.live()设置的事件要困难得多,他的示例您的问题是live
不绑定到任何特定的元素集,在单击事件发生时,它绑定到与特定选择器匹配的任何元素。这意味着您不能使用unbind
或off
来阻止单击触发处理程序
但是,您可以稍微修改选择器以排除具有特定类的元素,然后添加该类以告知live
忽略您的元素:
$('.el a:not(.been-clicked)').live('click', function(event){
event.preventDefault();
var $this = $(this);
$.ajax({
url: $this.attr('href'),
type: 'GET',
success: function(response){
$this.addClass('been-clicked');
}
});
});
技术演示:
Greg Pettit的评论是正确的,如果您使用的是jQuery1.7,甚至在1.6中也有点不赞成,那么就不应该再使用live
。您通常最好使用1.7之前的版本,如果您使用的是1.7:
$(document).on('click', '.el a:not(.been-clicked)', function() {
//...
});
您仍然无法使用解除绑定
或关闭
在
上停止此版本的(除非在非常狭窄的情况下,例如您只有一个与.el a
匹配的元素,并且仅附加了一个单击处理程序(或者如果您使用命名函数))。如果您使用的是“实时”样式的绑定,那么您仍然需要上面的“将类添加为标志”技巧,如果您绑定到在绑定单击处理程序时存在的一组特定元素,那么您根本不应该使用live
,您应该使用bind
,click
中的一个,或者on
将处理程序绑定到那些特定元素;然后可以使用unbind
或off
分离处理程序。或者更好,您可以使用jQuery,让jQuery担心如何分离处理程序。OK只是删除了$(this)部分以避免混淆,而不是“单击”,您可以添加名称空间(看起来像类选择器),例如“click.my”。然后,可以对元素调用.unbind('click.mine')
以解除单个事件的绑定,或对所有事件调用.unbind('.mine')
。.live
方法现在或将来将绑定到与选择器匹配的所有元素。你是想从点击的特定元素中分离事件,还是从现在和将来的所有(其他)匹配元素中分离事件?噢,我现在和你在一起,穆。有一阵子我没有想到。即使使用相同的技术,我也会使用.on()
(如果她使用的是1.7+)或.delegate()
)为Alex提供代码。@Greg:我不知道HTML是什么样子,所以我不能使用delegate
。不过,我已经为其他情况添加了一些提示。这当然会让它变得困难。很高兴看到你更新的帖子。但愿我能投两次票我通常用$(‘some祖先’)和一个简短的解释。对one
的调用也很好;我没想到这个。(呻吟)
$(document).on('click', '.el a:not(.been-clicked)', function() {
//...
});