Я пытаюсь обойти старую систему и по существу захватить кнопку отправки при некотором условии, применить обработчик к ней, а затем отвязать этот обработчик, когда закончите. Я использую bind
и unbind
, но событие связывается кумулятивно каждый раз, когда я запускаю форму, о которой идет речь.Отключить события от обработчика jQuery
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) '. Я работаю над плохим кодом в проекте с учетом времени, и это единственное решение, о котором я могу думать. Я знаю, что это может работать, я просто не знаю, почему мой метод не работает. – BarryBones41
Вы также можете использовать события пространства имен ... но лучше всего делегировать это один раз только при загрузке страницы. – charlietfl
Попробуйте 'this. $ Submit.off ('click.special'). On ('click.special', this.submit.bind (this)); ' – charlietfl