Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 03.08.2020, 21:38
Аватар для MC-XOBAHCK
Профессор
Отправить личное сообщение для MC-XOBAHCK Посмотреть профиль Найти все сообщения от MC-XOBAHCK
 
Регистрация: 06.08.2017
Сообщений: 473

Удалить слушатель с контекстом в ООП
Здравствуйте!
Подскажите пожалуйста, как правильно удалить слушатель в методе 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();
});


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

Последний раз редактировалось MC-XOBAHCK, 03.08.2020 в 22:08.
Ответить с цитированием
  #2 (permalink)  
Старый 03.08.2020, 21:58
Аватар для voraa
Профессор
Отправить личное сообщение для voraa Посмотреть профиль Найти все сообщения от voraa
 
Регистрация: 03.02.2020
Сообщений: 2,692

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

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();
});

Последний раз редактировалось voraa, 03.08.2020 в 22:08.
Ответить с цитированием
  #3 (permalink)  
Старый 03.08.2020, 22:10
Аватар для MC-XOBAHCK
Профессор
Отправить личное сообщение для MC-XOBAHCK Посмотреть профиль Найти все сообщения от MC-XOBAHCK
 
Регистрация: 06.08.2017
Сообщений: 473

Сообщение от voraa
А что такое importStart?
это я упрощал код до удобно читаемого и забыл там исправить.
Ответить с цитированием
  #4 (permalink)  
Старый 03.08.2020, 22:12
Аватар для MC-XOBAHCK
Профессор
Отправить личное сообщение для MC-XOBAHCK Посмотреть профиль Найти все сообщения от MC-XOBAHCK
 
Регистрация: 06.08.2017
Сообщений: 473

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

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

Тогда и удалять не нужно будет.
Спасибо вам! Работает то что надо.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Удалить слушатель с bind MC-XOBAHCK Общие вопросы Javascript 5 26.08.2019 13:54
Как удалить слушатель событий? spo Общие вопросы Javascript 9 22.12.2016 03:08
подскажите как удалить div alex2012 jQuery 5 13.10.2016 17:43
Как удалить коммит github Maxmaxmaximus6 Оффтопик 59 01.01.2014 19:42
Не могу выбрать и удалить клонируемые элементы AlexPrm jQuery 6 30.05.2010 15:58