В глобальной области вы можете удалить eventListener.Следующий код работает и должен показать желаемое поведение;Первая кнопка запускает альтернативу, а вторая нет.
window.addEventListener('load', () => {
const button1 = document.getElementById('button-1');
const button2 = document.getElementById('button-2');
button1.addEventListener('click', helloAlert);
button2.addEventListener('click', helloAlert);
button2.removeEventListener('click', helloAlert);
});
function helloAlert(){
window.alert('hello');
};
<button id='button-1'>addEventListener</button>
<button id='button-2'>addEventListener & removeEventListener</button>
В ситуации ООП я бы оказался в такой ситуации.
window.addEventListener('load', () => {
let button1 = document.getElementById('button-1');
let messenger1 = new Messenger( button1, 'hello 1' );
messenger1.addHelloAlert();
let button2 = document.getElementById('button-2');
let messenger2 = new Messenger( button2, 'hello-2' );
messenger2.addHelloAlert();
messenger2.removeHelloAlert();
});
class Messenger{
constructor( button, message ){
this.button = button;
this.text = message;
}
addHelloAlert(){
this.button.addEventListener('click', this.giveMessage.bind(this));
}
removeHelloAlert(){
// this is where I get stuck because
// I cannot reference to the relevant function
// to remove the eventListener
this.button.removeEventListener('click', this.giveMessage );
}
giveMessage(){
window.alert( this.text );
};
}
<button id='button-1'>addEventListener</button>
<button id='button-2'>addEventListener & removeEventListener</button>
Как вы можете видеть, eventListener не удаляется кодом ООП, потому что функция не выбрана.
Любой, у кого есть идеи, какрешить эту проблему в обычном JavaScript и ООП?