繁体   English   中英

从jQuery处理程序解除绑定事件

[英]Unbind events from jQuery handler

我正在尝试解决旧系统,本质上是在某种情况下劫持了一个提交按钮,对其应用了一个处理程序,然后在完成后取消绑定该处理程序。 我正在使用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代替。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM