我有一个提示,基本上是必填字段,不能包含小数。我有一个while循环,应该继续提示用户提供信息,直到指示一个数字,无论是否单击确定或取消。只要单击“确定”按钮,一切正常。如果保持空白并单击“确定”或者提供带小数的数字并单击“确定”,则会继续提示。但如果单击取消,则不会继续提示。
var rmiles = prompt("Please indicate actual miles driven for payroll");
while (rmiles == null | rmiles == "null" | rmiles == " " | rmiles.indexOf(".") != -1) {
alert("Mileage is required when arriving on site and can only be whole numbers. No Decimals. Please enter 0 if you did not intend to arrive on site.");
rmiles = prompt("Please indicate actual miles driven for payroll");
}
答案 0 :(得分:3)
我认为问题出在while
条件下 - 您在所有条件下都在bitwise OR |
。这意味着,即使单击“取消”时rmiles.indexOf(".")
被rmiles
设置为null
,也始终会调用prompt
。这是因为按位OR不会短路。
尝试短路的logical OR ||
,从而避免空引用错误:
while (rmiles == null || /*...*/
答案 1 :(得分:0)
因为rmiles
在用户点击“取消”时为空...所以rmiles.indexOf
会产生错误/异常并导致循环播放。