Страницы

Поиск по вопросам

среда, 24 апреля 2019 г.

При повторном вызове функции предыдущие значения объявленной переменной продолжают использоваться

На сей раз возник вопрос к var. Как заставить переменную перезаписывать своё значение при каждом новом вызове функции? Весь код функции прилагается.
function tablecell(){ var st = $(this).attr('id'); console.log(st); if($(this).is('.disabled')){ } else{ $('.questionBg').css({'display':'flex'}); function answer(){ if ($(this).is('#true')){ $(this).css({'background':'#83c849'}).css({'color':'#fff'}); $('.answer').addClass('disabled'); $('.disabled').off('click', answer); $('.teamSelection').css({'display':'flex'}); $('.selectTeam').click(function(){ $(close); alert(st); $("#"+st).addClass('disabled'); if($(this).is('.selectTeam1')){ $("#"+st).children('.question').css({'display':'none'}); $("#"+st).children('.team1').css({'display':'block'}); } else{ $("#"+st).children('.question').css({'display':'none'}); $("#"+st).children('.team2').css({'display':'block'}); } }); } else{ $(this).css({'background':'#e03a3a'}).css({'color':'#fff'}); $('.answer').addClass('disabled'); $('.disabled').off('click', answer); setTimeout(close, 1000); } } } $('.answer').click(answer); };
Вызов производится извне:
$(document).ready(function(){ $('.tablecell').click(tablecell); });
У меня ощущение, что функция банально не завершается, но новое значение в консоль при повторном вызове выводится. Однако, alert с каждым разом повторно выводит предыдущие значения. Что делать - не пойму. Массивом прописать?

Какого цвета этот блок?
    Варианты ответа:
  • Синий
  • Красный
  • Серый
  • Белый
Начать!


Ответ

Что делать
Не назначать обработчики событий внутри других обработчиков событий.
Каждый раз, когда выполняется функция tablecell, Вы добавляете новый обработчик события click всем элементам с классом "answer". По щелчку на такой элемент выполняются все накопившиеся обработчики.
(function(){ var st;
function answer(){ ... }
function tablecell(){ st = $(this).attr('id'); console.log(st); if($(this).is('.disabled')){ } else { $('.questionBg').css({'display':'flex'}); } }
$(document).on('click', '.tablecell', tablecell); $(document).on('click', '.answer', answer); })();

Комментариев нет:

Отправить комментарий