我正在尝试解决一个旧系统,并在某种情况下基本上劫持了一个提交按钮,对它应用一个处理程序,然后在我完成时取消绑定这个处理程序。我正在使用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
时,该事件再次被绑定但从未解除绑定。
答案 0 :(得分:1)
简单修复首先使用off()
并命名您的事件。删除命名空间事件不会干扰同一事件的其他侦听器
this.$submit.off('click.special').on('click.special', this.submit.bind(this));
请注意,bind()
和unbind()
已弃用..请改用on()
和off(0
。
更好的方法是在页面加载时委托这一次,而不是继续调用同一个类