从 jQuery 处理程序取消绑定事件

Unbind events from jQuery handler

本文关键字:绑定 事件 取消 程序 jQuery 处理      更新时间:2023-09-26

我正在尝试解决旧系统,并在某些情况下劫持一个提交按钮,对其应用处理程序,然后在完成后取消绑定此处理程序。我正在使用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事件都会再次绑定,但永远不会解除绑定。

简单的解决方法是首先使用off()并将事件命名为命名空间。删除命名空间事件不会干扰同一事件的其他侦听器

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

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

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