@OttoNurmanis

Как предотвратить повторную обработку события в самописном плагине jQuery?

https://jsfiddle.net/xzgv7fm3/3/

Суть:
По клику на ссылку показывается блок. Блок скрывается после клика в любом другом месте документа, кроме, как на сам блок или ссылку.

В блоке есть несколько счетчиков типа:
[ - ] 1 [ + ]
[ - ] 0 [ + ]
[ - ] 1 [ + ]


Все работает. Но выявил такой баг, что если скрыть блок и показать его еще раз (кликнув по ссылке), то будет прибавляться и вычитаться уже не +1, а +2 (или минус), при повторном скрыть/показать уже +3 (или минус) и так далее.

Помогите пожалуйста разобраться. Сломал голову.
  • Вопрос задан
  • 147 просмотров
Решения вопроса 1
@z_u_l
У Вас по клику должно выполняться только скрытие блока, а Вы добавили ещё клики по кнопкам, вот он и дергает Вам при скрытии эти функции, что влечёт за собой неверный подсчёт при инкременте и декременте.

Соответственно клики по кнопкам Вам нужно вынести за пределы этого блока

// обработали событие клик по ссылке для показа блока
$(this).click(function(e){
	e.stopPropagation();
	// показали блок
	$(settings.blockTools).removeClass("hidden");
});


Ссылка на пример
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 2
Exomode
@Exomode
Архитектор ПО
event.preventDefault();
или просто логику подписи событий приведите в порядок.
Ответ написан
Комментировать
Stalker_RED
@Stalker_RED
У вас ошибки в комментариях, и вероятно из-за этого ошибки в логике. Или наоборот.
// вызываем функцию с логикой обработки счетчика на прибаление
На самом деле в этой строке вы не вызываете логику, а вешаете обработчик события "click" на кнопку.
И при повторном показе формы делаете это еще раз, и теперь при клке на плюсик дважды сработает main(this, "add");
Ответ написан
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы