为什么在此函数中删除了事件处理程序?

问题描述 投票:0回答:1

我试图理解为什么需要删除事件处理程序。我是一名初学者,我搜遍了所有答案,但找不到原因。我遇到了下面的代码,我看到事件处理程序一旦绑定就被删除。这是一个好习惯吗?

bindSubmitEvent: function() {
  var self = this;
  $('#submitBtn').on('click', function() {
    $(this).off('click', self.bindSubmitEvent);
    self.validateForm();

    if (self.options.valid_selection) {
      self.submitForm();
    } else {
      $('#submitRegistrationBtn').on('click', self.bindSubmitEvent);
      console.log("not valid");
    }
  });
}
javascript jquery
1个回答
0
投票

您显示的代码不起作用。内部点击处理程序中的this#submitButton,因此尝试从中分离self.bindSubmitEvent毫无意义,因为该函数从未附加到它上面。

$('#submitRegistrationBtn').on('click', self.bindSubmitEvent)也会造成更多麻烦,因为下一次点击将附加两个事件,第二个将使用this调用(因此self#submitRegistrationBtn。这可能会导致整个代码失败(静默)。

这是一个好习惯吗?

非工作代码不是一个好习惯,不是。删除事件监听器有时是有意义的(例如,如果表单已提交,您希望禁用注册按钮),但在大多数情况下,更容易删除按钮本身(因为它没有附加监听器就没有功能) )。

© www.soinside.com 2019 - 2024. All rights reserved.