Javascript提示已取消,但在While循环中不起作用

Javascript提示已取消,但在While循环中不起作用,javascript,prompt,Javascript,Prompt,我有一个提示,基本上是必填字段,不能包含小数。我有一个while循环,它应该继续提示用户输入信息,直到显示一个数字,而不管单击OK还是Cancel。只要点击OK按钮,一切正常。如果留空并单击“确定”,或者如果提供了带小数点的数字并单击“确定”,则会继续提示。但如果单击“取消”,则不会继续提示 var rmiles = prompt("Please indicate actual miles driven for payroll"); while (rmiles == null | rmi

我有一个提示,基本上是必填字段,不能包含小数。我有一个while循环,它应该继续提示用户输入信息,直到显示一个数字,而不管单击OK还是Cancel。只要点击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");
    }

我相信问题在于你的
状态,而
状态-你在所有条件下都在做。这意味着总是调用
rmiles.indexOf(“.”
,即使单击取消时
rmiles
prompt
设置为
null
。这是因为按位OR不会短路

尝试短路,从而避免零参考错误:

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

我相信问题在于你的
状态,而
状态-你在所有条件下都在做。这意味着总是调用
rmiles.indexOf(“.”
,即使单击取消时
rmiles
prompt
设置为
null
。这是因为按位OR不会短路

尝试短路,从而避免零参考错误:

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

因为当用户单击“取消”时,
rmiles
为空。。。因此,
rmiles.indexOf
产生错误/异常并终止循环。

因为当用户单击“取消”时,
rmiles
为空。。。因此,
rmiles.indexOf
产生错误/异常并终止循环。

这听起来像是用户体验的反基督。您使用提示和警报而不是lightbox或类似内容中的必填字段,这有什么原因吗?这听起来像是用户体验的反基督。你使用提示和警报而不是lightbox中的必填字段或类似的东西,这是有原因的吗?这完全奏效了。这件事一经允许,我马上就接受你的回答。谢谢这完全奏效了。这件事一经允许,我马上就接受你的回答。谢谢