[英]Unbind events from jQuery handler
我正在尝试解决旧系统,本质上是在某种情况下劫持了一个提交按钮,对其应用了一个处理程序,然后在完成后取消绑定该处理程序。 我正在使用bind
和unbind
但是每次启动有问题的表单时,事件都会被累积绑定。
class MyForm(){
constructor(){
// button in question
this.$submit = $('#submit');
this.$submit.bind('click', this.submit.bind(this));
return this;
}
submit(){
return this.doAjaxStuff();
}
doAjaxStuff(){
var self = this;
return $.post(file, data).always(function(){
self.$submit.unbind('click', self.submit);
});
}
}
不幸的是,每次我创建一个新的MyForm
,事件都会再次绑定,但是永远不会解除绑定。
简单的解决方法是先使用off()
并为事件命名空间。 删除命名空间事件不会干扰同一事件的其他侦听器
this.$submit.off('click.special').on('click.special', this.submit.bind(this));
请注意,不建议使用bind()
和unbind()
..使用on()
和off(0
代替。
更好的方法是在页面加载后委托一次,而不是继续调用同一类
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.