Javascript 西蒙说游戏无法在电脑回合中禁用彩色键盘
我已经建立了西蒙游戏。如果用户正确播放,它可以正常工作,但为了充分证明这一点,我想在计算机显示下一个模式时禁止用户单击选项。我已经尝试过将jquery.on/.off.unbind/.bind与e.preventDefault结合使用,但都没有成功。有人能帮我添加这个功能的解决方案吗?如果你想看到完整的项目,这是一个codepen链接,因为我只想在下面发布相关的代码 HTML:Javascript 西蒙说游戏无法在电脑回合中禁用彩色键盘,javascript,jquery,Javascript,Jquery,我已经建立了西蒙游戏。如果用户正确播放,它可以正常工作,但为了充分证明这一点,我想在计算机显示下一个模式时禁止用户单击选项。我已经尝试过将jquery.on/.off.unbind/.bind与e.preventDefault结合使用,但都没有成功。有人能帮我添加这个功能的解决方案吗?如果你想看到完整的项目,这是一个codepen链接,因为我只想在下面发布相关的代码 HTML: 我的建议是使用某种旗帜来决定比赛的状态 显然,.off()并没有起到作用,所以我想说删除对它的所有引用。然而,我相信它
我的建议是使用某种旗帜来决定比赛的状态 显然,
.off()
并没有起到作用,所以我想说删除对它的所有引用。然而,我相信它不起作用的原因是你用错了。解除绑定时不需要使用.each()
。这就是选择器的作用,因此如果您使用$('.field').off('click','**')
,则应该从具有class='field'
的任何元素中删除所有委托的单击处理程序。要了解正确的用法,我建议查看以下内容:
但是,我仍然不认为您应该删除委派的事件。为了简化事情,只需要有一个可以检查的标志来查看游戏状态
var gameState = 0; //0 means the user can click, 1 means the user cannot
function playComputerSequence(seq, speed){
gameState = 1;
//Rest of function code
//...
gameState = 0;
}
function recordUserChoice(){
if(gameState === 1) return; //if gameState is 1, jump out of the function
//Rest of function code
//...
}
虽然这种逻辑是可行的,但对于您的情况,它需要进行稍微不同的调整
在代码的开头,在音频阵列的下方
放置下面的代码。这将是您的字段
单击处理程序
$(document).on('click', '.field', recordUserChoice);
然后,我意识到,gamestate
基本上会立即变回0
,所以我把它放在clearInterval(interval)
下面,因为这是决定计算机何时运行的因素
if(i == count)
{
clearInterval(interval);
gamestate = 0;
console.log(gamestate);
}
然后,您可以删除$('.field')的所有实例。每个(
查看此笔:Adjit是正确的,
.off()
不接受您定义的anon函数。它只接受对函数名的引用,以从元素中删除特定的事件处理程序。您的解决方案对我来说很有意义,我尝试实现它。在comp序列中,我的更新笔现在看起来是这样的,它记录0并输入else语句。我想可能是因为compSequence函数中的setInterval或setTimeout,不确定。而且,如果我尝试更改$('.field').each(function(){$(this).off().on('click',recordUserChoice);});在('click',recordUserChoice)上;游戏中断了,就像它两次调用recordUserChoice一样。所以我不能像你建议的那样移除这个test@RawleJuglal现在看一看。继续测试并移动gameState=0,以恢复用户使用clearInterval(interval)点击setTimeout函数的能力,这解决了问题。非常感谢你的建议。“我甚至没有想过要用旗子来检查。”罗莱朱格拉尔很乐意帮忙。有时候,最好的解决方案是最简单的。
$(document).on('click', '.field', recordUserChoice);
if(i == count)
{
clearInterval(interval);
gamestate = 0;
console.log(gamestate);
}