Javascript提示取消不在While循环中表现

时间:2011-10-13 19:06:24

标签: javascript prompt

我有一个提示,基本上是必填字段,不能包含小数。我有一个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");
    }

2 个答案:

答案 0 :(得分:3)

我认为问题出在while条件下 - 您在所有条件下都在bitwise OR |。这意味着,即使单击“取消”时rmiles.indexOf(".")rmiles设置为null,也始终会调用prompt。这是因为按位OR不会短路。

尝试短路的logical OR ||,从而避免空引用错误:

while (rmiles == null || /*...*/

答案 1 :(得分:0)

因为rmiles在用户点击“取消”时为空...所以rmiles.indexOf会产生错误/异常并导致循环播放。