如何在满足条件后立即更改对象属性?



我试图使一个按钮从。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
);

最新更新