Страницы

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

пятница, 3 января 2020 г.

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

#javascript #html #jquery #html5


На сей раз возник вопрос к 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 с каждым разом повторно выводит предыдущие значения. Что делать - не
пойму. Массивом прописать?

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


Ответы

Ответ 1



Что делать Не назначать обработчики событий внутри других обработчиков событий. Каждый раз, когда выполняется функция 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); })();

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

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