Javascript 单击事件时在条件语句中计算的切换布尔变量

Javascript 单击事件时在条件语句中计算的切换布尔变量,javascript,if-statement,dynamic,onclick,Javascript,If Statement,Dynamic,Onclick,我正在切换布尔变量“userTurn”。有两个函数可以设置“userTurn”的值: runGame(),它在播放当前回合中的最后一个声音后将“userTurn”设置为true buttonClick(),仅当“userTurn”为true时才应执行。按钮在用户成功复制当前模式或用户出错后,单击将“userTurn”设置为false 我正在计算click事件内部的条件语句中“userTurn”的值 $(".quarter").on('click', function(){ if( use

我正在切换布尔变量“userTurn”。有两个函数可以设置“userTurn”的值:

  • runGame(),它在播放当前回合中的最后一个声音后将“userTurn”设置为true

  • buttonClick(),仅当“userTurn”为true时才应执行。按钮在用户成功复制当前模式或用户出错后,单击将“userTurn”设置为false

    我正在计算click事件内部的条件语句中“userTurn”的值

    $(".quarter").on('click', function(){
        if( userTurn===true && isOn===true){
            var color = $(this).attr('id');
            clearTimeout(buzz);
            buttonClick(color);
        } 
    })
    
    用户成功复制当前模式后,或者如果用户出错,“userTurn”设置为false。我遇到的问题是,在“userTurn”设置为false之后,条件语句中的代码仍在执行。目标是使“.quarter”仅在“userTurn”为真时才可单击。为什么即使“userTurn”为false,单击“.quarter”时buttonClick()函数仍在执行

  • 下面是设置“userTurn”值的两个函数:

  • runGame():

    2.按钮单击():

  • 在使用密码笔之前,请将音量调低!! 这里有一个链接到。
    要开始游戏,请单击“开-关”,然后单击“开始”。计时很慢,因此您必须等待模式播放,然后按播放顺序单击按钮。在播放第一个声音后可以看到问题。从那时起,用户所做的任何点击都将播放声音并点亮按钮,即使游戏正在播放模式且“userTurn”为false时也是如此。还要注意的是,这仍然是一项正在进行的工作,我正在处理一些其他的bug,例如用户的第一个回合将不会亮起或播放声音,但是选择将被推入正确的数组中,游戏将根据您的选择正确进行。我知道这是很多信息,但我被困在这,所以任何反馈将非常感谢。谢谢

    您正在使用
    按钮单击
    来处理单击按钮的操作,但在
    按钮单击
    中,您正在为每个按钮设置
    鼠标点
    鼠标点
    事件侦听器。由于各个按钮都有自己的
    mouseup
    mousedown
    侦听器,因此无论是否再次调用
    buttonClick
    ,都会发生事件

    您还必须检查每个事件处理程序中的
    userTurn
    是否为
    true
    ,以防止它们触发。另外,最好将这些设置在
    按钮单击
    之外,这样就不会在每次调用
    按钮单击
    时都添加新的侦听器

    function runGame(){
        if(isOn===true){
            userTurn = false;
            count();
            playPattern(order, index);
            if(index===counter-1&&userTurn===false){
                userTurn=true;
                clearInterval(play);
                buzz = setTimeout(buzzer, 10000);
            }else{
                index++;
            } 
        } else {
            clearInterval(play);
            clearTimeout(buzz);
        }
    }
    
    function buttonClick(color){
        var yellowSound = document.getElementById("horseSound");
        var redSound = document.getElementById("endFx");
        var greenSound = document.getElementById("westernRicochet");
        var blueSound = document.getElementById("robotBlip");
        $("#red").mousedown(function(){
            $("#red").css("background-color", "#ff4d4d");
            redSound.play();
        });
        $("#red").mouseup(function(){
            $("#red").css("background-color", "#ff0000");
            redSound.pause();
        });
        $("#blue").mousedown(function(){
            $("#blue").css("background-color", "#0000e6");
            blueSound.play();
        });
        $("#blue").mouseup(function(){
            $("#blue").css("background-color", "#000099");
            blueSound.pause();
        });
        $("#green").mousedown(function(){
            $("#green").css("background-color", "#00e600");
            greenSound.play();
        });
        $("#green").mouseup(function(){
            $("#green").css("background-color", "#009900");
            greenSound.pause();
        });
        $("#yellow").mousedown(function(){
            $("#yellow").css("background-color", "#ffff4d");
            yellowSound.play();
        });
        $("#yellow").mouseup(function(){
            $("#yellow").css("background-color", "#ffff00");
            yellowSound.pause();
        });
        if(color===order[compareIndex]){
            userPattern.push(color);
            console.log(userPattern, "match");
            buzz = setTimeout(buzzer, 10000);
            compareIndex++;
            if(userPattern.length===counter){
                userTurn=false;
                compareIndex=0;
                index=0;
                counter++;
                count();
                userPattern.length=0;
                play = setInterval(runGame, 2000);
                clearTimeout(buzz);
            }
        } else {
            userTurn=false;
            console.log('don\'t match');
            clearTimeout(buzz);
            index=0;
            compareIndex = 0;
            userPattern.length=0;
            buzz = setTimeout(buzzer, 1);
        }
    }