解除jQuery处理程序中的事件

时间:2016-07-16 17:02:42

标签: javascript jquery

我正在尝试解决一个旧系统,并在某种情况下基本上劫持了一个提交按钮,对它应用一个处理程序,然后在我完成时取消绑定这个处理程序。我正在使用bindunbind,但每次启动相关表单时,该事件都会被累积约束。

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时,该事件再次被绑定但从未解除绑定。

1 个答案:

答案 0 :(得分:1)

简单修复首先使用off()并命名您的事件。删除命名空间事件不会干扰同一事件的其他侦听器

this.$submit.off('click.special').on('click.special', this.submit.bind(this));

请注意,bind()unbind()已弃用..请改用on()off(0

更好的方法是在页面加载时委托这一次,而不是继续调用同一个类