Javascript 为什么我的设置间隔似乎在警报消息后最后运行一次?
我正在编写一个简单的n-back游戏,在一个会话结束时,我会弹出一条警告消息,告诉用户如果他们的n-back分数达到75%或更高,他们的n-back级别将提高。但是由于某种原因,在用户单击OK或点击enter之后,Javascript 为什么我的设置间隔似乎在警报消息后最后运行一次?,javascript,Javascript,我正在编写一个简单的n-back游戏,在一个会话结束时,我会弹出一条警告消息,告诉用户如果他们的n-back分数达到75%或更高,他们的n-back级别将提高。但是由于某种原因,在用户单击OK或点击enter之后,setInterval函数似乎又运行了一次。在我创建的网格上,还有一个正方形亮起,即使会话本应结束。我将在下面发布相关的游戏代码: $('#start').click(function() { let counter = 0; message_switch = tr
setInterval
函数似乎又运行了一次。在我创建的网格上,还有一个正方形亮起,即使会话本应结束。我将在下面发布相关的游戏代码:
$('#start').click(function()
{
let counter = 0;
message_switch = true;
$('#start').blur();
$('#score-output').text(0);
$('#percentage').text('%');
var intervalID = setInterval(function()
{
counter++;
show_card(get_cardID(cardIDs));
if (counter === 30)
{
window.clearInterval(intervalID);
message_switch = false;
var score = Math.round((playerMatches.length / matches.length) * 100);
score = score - (error_count * 3);
update_score(score);
if (score < 50)
{
if (n_back < 2)
{
n_back = 1;
} else {
n_back = n_back - 1;
}
} else if (score < 75 && score >= 50)
{
n_back = n_back;
} else if (score >= 75) {
n_back = n_back + 1;
};
$('#nback').text(n_back);
reset_game_values();
if (score >= 75) //here there is some issue
{
window.alert("Congratulations, you will move up to " + n_back + " back.");
score = 0;
return;
} else {
score = 0;
}
}
}, 3500);
})
$(“#开始”)。单击(函数()
{
设计数器=0;
消息_开关=真;
$('#start').blur();
$(“#分数输出”)。文本(0);
$('百分比').text('百分比');
var intervalID=setInterval(函数()
{
计数器++;
出示卡片(获得卡片(卡片));
如果(计数器==30)
{
窗口。clearInterval(intervalID);
消息_开关=错误;
var分数=数学轮((playerMatches.length/matches.length)*100);
分数=分数-(错误计数*3);
更新大学分数(分数);
如果(分数<50)
{
如果(n_back<2)
{
n_back=1;
}否则{
n_back=n_back-1;
}
}否则如果(分数<75&&score>=50)
{
n_back=n_back;
}否则如果(分数>=75){
n_back=n_back+1;
};
$('nback')。文本(n#u back);
重置游戏值();
如果(分数>=75)//这里有一些问题
{
window.alert(“恭喜你,你将升级到”+n_back+“back”);
得分=0;
返回;
}否则{
得分=0;
}
}
}, 3500);
})
我知道这是很多代码,也有很多代码我没有提供,主要是为了尽量简短。有人看到我没有看到的明显的东西吗?如果你觉得你需要看更多的节目,我可以提供。谢谢。您确定在您的过程中没有再次单击
#开始
吗?我也想知道,但整个游戏过程不会重新开始。一张网格卡最后一次亮起,然后游戏结束,即使游戏已经结束了,因为这个方法是在间隔id被使用之后使用的。在snippet或JSFIDLE中做一个可重复的例子,它似乎没有这个代码的问题,问题可能来自html。我尝试使用codepen,但由于某些原因,它在codepen中根本不起作用。代码是完全一样的,我只是复制和粘贴。这是我无法理解的。如果没有一些代码片段来播放,将很难猜测。所以我给你一些建议:1)定义intervalID和gobal作用域,也就是说,在click事件的监听器之外。2) 在开始新的setInterval()
调用clearInterval(invervalID)
之前。