Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Удалить слушатель с контекстом в ООП (https://javascript.ru/forum/misc/80802-udalit-slushatel-s-kontekstom-v-oop.html)

MC-XOBAHCK 03.08.2020 21:38

Удалить слушатель с контекстом в ООП
 
Здравствуйте!
Подскажите пожалуйста, как правильно удалить слушатель в методе start в таком скрипте:
document.addEventListener('DOMContentLoaded', function() {
    var app = {
        $btnStart: document.getElementById('import-start'),

        event() {
            this.$btnStart.addEventListener('click', this.start.bind(this));
        },

       start() {
            this.$btnStart.removeEventListener('click', this.start.bind(this));
        },

        init() {
            this.event();
        }
    }

    app.init();
});


Сейчас слушатель не удаляется и при клике на кнопку запускает скрипт заново, а мне нужно чтобы срабатывало только один раз :( .

voraa 03.08.2020 21:58

Что бы выполнялся один раз, можно

this.$btnStart.addEventListener('click', this.start.bind(this),{once:true});

Тогда и удалять не нужно будет.

А что такое importStart?

Ну или так
document.addEventListener('DOMContentLoaded', function() {
    var app = {
        $btnStart: document.getElementById('import-start'),
        $clickHandler: null;
 
        event() {
            this.$clickHandler = this.start.bind(this)
            this.$btnStart.addEventListener('click',  this.$clickHandler);
        },
 
       start() {
            this.$btnStart.removeEventListener('click',  this.$clickHandler);
        },
 
        init() {
            this.event();
        }
    }
 
    app.init();
});

MC-XOBAHCK 03.08.2020 22:10

Цитата:

Сообщение от voraa
А что такое importStart?

это я упрощал код до удобно читаемого и забыл там исправить.

MC-XOBAHCK 03.08.2020 22:12

Цитата:

Сообщение от voraa
Что бы выполнялся один раз, можно

this.$btnStart.addEventListener('click', this.start.bind(this),{once:true});

Тогда и удалять не нужно будет.

Спасибо вам! Работает то что надо.


Часовой пояс GMT +3, время: 03:52.