捕获由setTimeout javascript触发的确认消息

捕获由setTimeout javascript触发的确认消息,javascript,settimeout,alert,confirm,Javascript,Settimeout,Alert,Confirm,我正在制作一个棋盘游戏,我有一个函数,可以根据玩家的目的地调用各种警报。对于最终目的地,我尝试调用警报消息,然后调用确认消息,询问他们是否想再次播放。我想捕获确认响应,并在单击确定时触发reset()函数 对于警报和确认的顺序,我能想到的唯一错开它们的方法是使确认消息的setTimeout延迟比警报消息的setTimeout延迟稍长一点 另外,我的else语句是一个console.log(“Game over.”),它甚至在应该触发它的确认消息弹出之前就显示在控制台中。此外,单击确认消息上的“确

我正在制作一个棋盘游戏,我有一个函数,可以根据玩家的目的地调用各种警报。对于最终目的地,我尝试调用警报消息,然后调用确认消息,询问他们是否想再次播放。我想捕获确认响应,并在单击确定时触发reset()函数

对于警报和确认的顺序,我能想到的唯一错开它们的方法是使确认消息的setTimeout延迟比警报消息的setTimeout延迟稍长一点

另外,我的else语句是一个console.log(“Game over.”),它甚至在应该触发它的确认消息弹出之前就显示在控制台中。此外,单击确认消息上的“确定”或“取消”不会触发任何内容。不知道发生了什么事

function message(dest) {

if(dest===5) window.setTimeout(alert, 5000, "Great start.");
... (a lot more else if statements here)
else if (dest===134) {
    window.setTimeout(alert, 3000,"You made it.");
    if (window.setTimeout(confirm, 5000, "Game over. Do you want to play again?")==true) reset();
    else console.log("Game over.")
}

看起来你在找这样的东西:


顺便说一句,我认为setTimeout不是管理事件的正确方法

这与其说是一个答案,不如说是一个建议,这就是我为什么要对它发表评论的原因。但似乎没有一个很好的理由让你先发出警报,然后再确认。类似于“干得好,你成功了!你想再踢一次吗?”这样的确认也能达到同样的目的。此外,如果您希望对弹出框进行更多控制,那么我建议您滚动自己的警报/确认框。即使我删除警报消息并只留下确认消息,重置功能仍不会被调用。我想知道我的语法中哪里有错误。即使在你的JSFIDLE(和我遇到的相同问题)中,在确认消息“游戏结束,你想再次玩吗?”之后也会出现警报“你成功了”。游戏结束应该是次要的。另外,对于使用什么来代替setTimeout,您有什么建议吗?因为
setTimeout
的第一个参数(函数)被立即调用,所以confirm是第一个。If
window.setTimeout(MyConfirm(),5000)更改为
window.setTimeout(MyConfirm,5000),它按预期工作。
function message(dest) {

if(dest===5) 
    window.setTimeout(alert, 5000, "Great start.");

else if (dest===134) {
    window.setTimeout(alert, 3000,"You made it.");
    window.setTimeout(MyConfirm, 5000);


}
}

function MyConfirm(){
    if(confirm("Game over. Do you want to play again?"))
        reset();
    else
        noReset();
}

function reset(){alert('reset');}
function noReset(){alert('no reset');}

message(134);