#javascript #jquery
Привет. Я использую функцию .off('click') чтобы клик по кнопке не тригернулся. Но как потом вернуть возможность клика, чтобы $('#element').on('click', function() { }); заработал?
Ответы
Ответ 1
Функция .off() не предотвращает генерацию события, а удаляет обработчик события. Соответственно, чтобы "вернуть возможность клика" необходимо снова назначить обработчик события: $('#element').on('click', function(){}) Когда логика приложения предполагает периодическое отключение и включение обработки событий, сложность представляет удалить конкретный обработчик события и оставить другие обработчики (о которых мы можем даже не знать). Чтобы решить эту задачу, есть следующие возможности. Удаление с помощью указание обработчика У функции .off есть перегрузка .off( events [, selector ], handler ) которая позволяет отключать конкретную функцию-обработчик, что позволяет удобно отключать и подключать обработку события: $('#element').on('click', handler); // назначаем обработчик события `click` на элементе $('#element').off('click', handler); // удаляем конкретный обработчик $('#element').on('click', handler); // вновь установим тот же обработчик Однако у этого решения есть минус: При удалении конкретных обработчиков (когда задан параметр handler) следует быть осторожным, если при их установке использовалась $.proxy() или подобные механизмы. Это связанно с тем, что для удаления конкретных обработчиков, jQuery сравнивает специфические id функций, которые будут совпадать для функций, созданных с помощью $.proxy(). В связи с этим, с элементов могут быть удалены обработчики, которые вы не планировали удалять. Источник Удаление с помощью пространства имен Пространство имен задается через точку после типа события: 'click.myPlugin'. Если при назначении обработчика, мы использовали пространства имен, мы можем безопасно удалить свой обработчик, не затронув другие обработчики: $('#element').on('click.myPlugin', handler); // назначаем обработчик на событие `click` с пространством имен `myPlugin` $('#element').off('click.myPlugin'); // удаляем все обработчики событие `click` с пространством имен `myPlugin` // или $('#element').off('.myPlugin') // удаляем обработчики всех типов событий с пространством имен `.myPlugin`
Комментариев нет:
Отправить комментарий