Javascript setTimeout仅在初始单击时起作用,而不是在后续单击时起作用(jquery)

Javascript setTimeout仅在初始单击时起作用,而不是在后续单击时起作用(jquery),javascript,jquery,settimeout,Javascript,Jquery,Settimeout,做一个记忆游戏。尝试使用setTimeout,以便在不匹配时卡恢复到其原始状态。该功能在初次点击时起作用,当卡与卡不匹配时,不会出现任何问题。然而,一旦有一场比赛,我继续打牌,这些牌将不再在超时时工作,并且只会在点击第三张牌时恢复到原来的状态,现在它在不增加setTimeout的情况下工作。这显然是非常简短的,但我想我已经包括了相关的位,如果没有当然让我知道 cardFlip = 0; $box.on("click", function() { cardFlip++; }); else if

做一个记忆游戏。尝试使用setTimeout,以便在不匹配时卡恢复到其原始状态。该功能在初次点击时起作用,当卡与卡不匹配时,不会出现任何问题。然而,一旦有一场比赛,我继续打牌,这些牌将不再在超时时工作,并且只会在点击第三张牌时恢复到原来的状态,现在它在不增加setTimeout的情况下工作。这显然是非常简短的,但我想我已经包括了相关的位,如果没有当然让我知道

cardFlip = 0;

$box.on("click", function() {
cardFlip++;
});

else if (cardFlip == 2){
    $box.css("pointerEvents", "none");
    setTimeout( () => {
    $(".active").removeClass("active");
    $(".first").removeClass("first");
    $(".second").removeClass("second");
    $box.css("pointerEvents", "all");   
    }, 800);
    cardFlip = 0;

  }

我认为cardFlip=0;在函数的末尾,将再次开始计数为0,但我显然弄错了。

创建一个标志变量,在超时内执行任何操作之前,将对其进行检查。如果设置了标志变量,则超时应在该点停止执行。一旦有匹配项,就应该设置此变量

setTimeout( () => {
if (!match) {
$(".active").removeClass("active");
$(".first").removeClass("first");
$(".second").removeClass("second");
$box.css("pointerEvents", "all");   
}}, 800);

据我所见,我怀疑您出现问题的主要原因是,超时设置为800ms,您可能会在该时间范围内点击卡片。

是否处于活动状态,第一类和第二类要退后的牌?你有什么理由使用超时吗?如果我理解正确的话,取消这些课程会使他们恢复到原来的状态,比如说,面朝下,我试图增加暂停时间,因为我的教练说这是让游戏正常运行的一种适当方式,我应该纠正它。没有它,它工作得非常好。。。。