Javascript提示被取消,在While循环中不行为

Javascript Prompt Cancelled Not Behaving in While Loop

本文关键字:循环 While 提示 取消 Javascript      更新时间:2023-09-26

我有一个提示符,它基本上是一个必填字段,不能包含小数。我有一个while循环,它应该继续提示用户输入信息,直到显示一个数字,无论是否单击OK或Cancel。只要点击OK按钮,一切都可以正常工作。如果留空并单击OK,或者提供了带有小数的数字并单击OK,则继续提示。但是如果点击取消,它不会继续提示。

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");
    }

我认为问题在于您的while条件-您在所有条件下都是按位或|。这意味着rmiles.indexOf(".")总是被调用,即使rmilesprompt设置为null时,单击取消。这是因为按位或不会短路。

尝试逻辑或||短路,从而避免null引用错误:

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

因为当用户点击'取消'时rmiles为空…因此,rmiles.indexOf产生一个错误/异常并终止循环。