Есть ли смысл удалять обработчик событий document после закрытия попапа?

Представим, что есть веб-страница, на которой иногда выскакивает попап. Он должен закрываться при нажатии Esc и при клике на непопапную область страницы. Попап появляется/закрывается при помощи функций jQuery show()/hide(). На document вешаются обработчики:
$(document).on("keydown", function(e) {
	if (e.keyCode == 27) {
		$("#popup").closePopup();
	}
});
$(document).on("click", function() {
	$("#popup").closePopup();
});

Есть ли смысл после закрытия попапа выполнять
$(document).off("keydown");
$(document).off("click");

т.е. удалять обработчики, чтоб у элемента #popup впустую не вызывался hide()?
  • Вопрос задан
  • 2454 просмотра
Решения вопроса 1
Petroveg
@Petroveg
Миром правят маленькие с#@&ки
Достаточно проверять наличие попапа.
Вызывайте одну функцию, не нужно дублировать код в двух обработчиках. Более того, тогда можно снимать именно эту функцию, а не обнулять полностью стэк обработчиков.

Даже если ставить/снимать, делать нужно примерно так

var popup = $('#popup');

function openPopup() {
	...
	$(document)
		.on('keydown', closePopup)
		.on('click', closePopup);
}

function closePopup() {
	popup.closePopup();
	$(document)
		.off('keydown', closePopup)
		.off('click', closePopup);
}
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы