Javascript 尽管使用了off,但仍单击函数激发,这可能也会导致阵列问题

Javascript 尽管使用了off,但仍单击函数激发,这可能也会导致阵列问题,javascript,jquery,Javascript,Jquery,我正在做一个西蒙游戏,我想我已经接近尾声了(耶!),但我似乎被一个问题困住了。玩家匹配西蒙的第一步后,移动到下一轮,并用第二步填充阵列。然后,您可以匹配第二步,这也可以正确地迭代。但我认为它是第二次发射,然后它通常是错误的,然后使玩家阵列有一个移动作为最后一个移动,而不是重置 我如何确保按钮只按下一次就可以开火,如何使玩家阵列正确重置 function playerInput(simon, player, j){ while (j < simon.length)

我正在做一个西蒙游戏,我想我已经接近尾声了(耶!),但我似乎被一个问题困住了。玩家匹配西蒙的第一步后,移动到下一轮,并用第二步填充阵列。然后,您可以匹配第二步,这也可以正确地迭代。但我认为它是第二次发射,然后它通常是错误的,然后使玩家阵列有一个移动作为最后一个移动,而不是重置

我如何确保按钮只按下一次就可以开火,如何使玩家阵列正确重置

function playerInput(simon, player, j){
    while (j < simon.length)  
        {
            console.log(j);
            if(simon[j] === player[j])
            {
                console.log("player pressed the correct button");
                j++;
                // potentially not working off function
                $(".simon-button").off().on('click', function() {
                    // stops multiple executions
                });
                buttons(simon, j, player);
            }
            else
            {
                if(strict === true)
                {
                    reset();
                    return; 
                }
                else
                {
                    console.log("player pressed the wrong button");
                    // seems to be screwing up here when it's wrong
                    // but not when used to reset player when it's right
                    player = [];
                    repeatMoves(player);
                    return;
                }
            }
        }
    if(j >= simon.length && simon.length < 20) 
        {
            j = 0;
            player = [];
            newMove(player);
        }
    else
    {
        alert("You win!!!");
        successSound.play();
        reset();
    }   
}

function buttons(simon, j, player){
    green.css('cursor', 'pointer');
    red.css('cursor', 'pointer');
    blue.css('cursor', 'pointer');
    yellow.css('cursor', 'pointer');
    $(".simon-button").click(function(){
        if($(this).hasClass("green-button"))
            {
                player.push(greenPushed());
                playerInput(simon, player, j);
            }
        else if($(this).hasClass("red-button"))
            {
                player.push(redPushed());
                playerInput(simon, player, j);
            }
        else if($(this).hasClass("blue-button"))
            {
                player.push(bluePushed());
                playerInput(simon, player, j);
            }
        else if($(this).hasClass("yellow-button"))
            {
                player.push(yellowPushed());
                playerInput(simon, player, j);
            }
        console.log(player);
        console.log(simon);
    });
}
函数播放器输入(西蒙,播放器,j){
while(j=simon.length&&simon.length<20)
{
j=0;
玩家=[];
新招(球员);
}
其他的
{
警惕(“你赢了!!!”;
successSound.play();
重置();
}   
}
功能按钮(西蒙、j、播放器){
css('cursor','pointer');
css('cursor','pointer');
css('cursor','pointer');
css('cursor','pointer');
$(“.simon按钮”)。单击(函数(){
if($(this).hasClass(“绿色按钮”))
{
player.push(greenpush());
playerInput(西蒙,球员,j);
}
else if($(this).hasClass(“红色按钮”))
{
player.push(redpush());
playerInput(西蒙,球员,j);
}
else if($(this).hasClass(“蓝色按钮”))
{
player.push(bluepush());
playerInput(西蒙,球员,j);
}
else if($(this).hasClass(“黄色按钮”))
{
player.push(黄色push());
playerInput(西蒙,球员,j);
}
控制台日志(播放器);
console.log(simon);
});
}


我忘了提到,要使小提琴工作,请单击空按钮,然后单击开始按钮。

我还没有充分理解您的代码,以理解这应该做什么,但它确实有一点没完没了的循环:

while (j < simon.length)  {
    if(simon[j] === player[j]) {
        // ...
        j++; // ok
        // ...
    } else {
        // nothing in this clause modifies j.  To infinity and beyond...
    }
}
while(j

有一个
i=0在那里,之前没有提到
i
,所以也许这就是问题所在(尽管将j设置为零仍然会让您陷入一个无休止的循环。)我怀疑您想在
中打破while循环,或者通过设置
j==simon.length
,或者在
重复移动之后通过
返回

谢谢你的帮助。现在,它的四轮马车,但至少它运行移动2-3。