我试图理解为什么需要删除事件处理程序。我是一名初学者,我搜遍了所有答案,但找不到原因。我遇到了下面的代码,我看到事件处理程序一旦绑定就被删除。这是一个好习惯吗?
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");
}
});
}
您显示的代码不起作用。内部点击处理程序中的this
是#submitButton
,因此尝试从中分离self.bindSubmitEvent
毫无意义,因为该函数从未附加到它上面。
$('#submitRegistrationBtn').on('click', self.bindSubmitEvent)
也会造成更多麻烦,因为下一次点击将附加两个事件,第二个将使用this
调用(因此self
是#submitRegistrationBtn
。这可能会导致整个代码失败(静默)。
这是一个好习惯吗?
非工作代码不是一个好习惯,不是。删除事件监听器有时是有意义的(例如,如果表单已提交,您希望禁用注册按钮),但在大多数情况下,更容易删除按钮本身(因为它没有附加监听器就没有功能) )。