我试图使一个按钮从。disabled = true到。disabled = false。我复制《Yahtzee》只是为了好玩,你必须在第三次掷骰子时选择一个分数,之后按钮将被解锁,你可以再次掷骰子。这是我的,但是它崩溃了。我想做一个while语句,直到选出一个分数。PTSSS是已选择的分数的数量。(即第三次掷骰子等于1分)
if(rollcount == 3){
while (ptsss * 3 < rollcount){
document.getElementById("rollbutton").disabled = true;
if (ptsss * 3 == rollcount){
document.getElementById("rollbutton").disabled = false;
break;
}
}
}
}
尝试删除while
循环并(可能)将代码重写为根据需要启用/禁用滚动按钮的功能。如
function checkRollButton( rollcount, ptsss) {
if(rollcount == 3) {
document.getElementById("rollbutton").disabled = ptsss != 1;
}
}
然后在更新rollcount
和/或ptsss
的事件处理程序中调用(或内联代码)checkRollbutton
。
- 如前所述,
ptsss
的值不能被其他代码在while
循环运行时改变,因为JavaScript是单线程的。 - 我根据我对设计的理解修改了启用/禁用滚动按钮的语句,请在使用前检查。
JavaScript中的循环与其他语言中的循环不同。
如果循环中的条件没有在循环本身中被修改,则它不会被修改(除非可能发生在异步函数中)。
你也不应该总是在循环中使用getElement
。
在JavaScript中实现while循环在其他语言中的一般功能的方法是使用interval
。
所以基于你更新的代码可以看起来像这样(不确定第一个if语句是从哪里被调用的,所以我把它拿出来,嵌套的if语句也不会被调用,因为它只在它的条件为假时生效,所以我也改变了):
var roll=document.getElementById("rollbutton")//make sure this is called after that element has loaded
var inter=setInterval(function(){
if (ptsss * 3 == rollcount){
roll.disabled = false;
clearInterval(inter)
//Similar to break in while loop, can restart interval later after this
}
if (ptsss * 3 < rollcount){
roll.disabled = true;
}
}
},1000/30//30 FPS
);