2011-10-13 134 views
0

我有一個提示,基本上是必填字段,不能包含小數。我有一個while循環,應該繼續提示用戶輸入信息,直到指示一個數字,而不管是否單擊OK或Cancel。只要單擊確定按鈕,一切正常。它會繼續提示是否保留空白並單擊確定,或者是否提供了帶小數的數字,並單擊確定。但是如果點擊取消,它不會繼續提示。Javascript Prompt Cancelled While While While Loop

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

這聽起來像是用戶體驗的反基督。是否有一個原因,你使用的提示和警報,而不是在燈箱或類似的東西需要的領域? – jbabey

回答

3

我相信這個問題是在你的while條件 - 你在所有條件做bitwise OR |。這意味着總是調用rmiles.indexOf("."),即使當rmiles設置爲nullprompt單擊取消時。這是因爲按位OR不會短路。

嘗試這確實短路,從而避免了空引用錯誤logical OR ||

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

+1我對自己沒有看到這一點感到失望。 –

+0

這完全奏效。只要這件事讓我感動,我會在幾分鐘內接受你的答案。謝謝! – jmease

0

rmiles由於爲空,當用戶點擊「取消」 ...這樣rmiles.indexOf產生錯誤/異常並殺死循環。