Подканата на Javascript е отменена, не се държи в цикъла While

Имам подкана, която основно е задължително поле и не може да съдържа десетичен знак. Имам цикъл, който трябва да продължи да подканва потребителя за информация, докато не бъде посочено число, независимо дали е щракнато OK или Отказ. Всичко работи добре, докато се щракне върху бутона 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");
    }

person jmease    schedule 13.10.2011    source източник
comment
Това звучи като антихриста на потребителското изживяване. Има ли причина да използвате подкани и предупреждения вместо задължително поле в лайтбокс или нещо подобно?   -  person jbabey    schedule 13.10.2011


Отговори (2)


Вярвам, че проблемът е във вашето while състояние - правите побитово ИЛИ | при всички условия. Това означава, че rmiles.indexOf(".") винаги се извиква, дори когато rmiles е зададено на null от prompt, когато се щракне върху Отказ. Това е така, защото битовото ИЛИ няма да доведе до късо съединение.

Опитайте логическо ИЛИ ||, което прави късо съединение и по този начин избягва нулата референтна грешка:

while (rmiles == null || /*...*/
person jball    schedule 13.10.2011
comment
Това напълно проработи. Ще приема отговора ви след няколко минути, веднага щом това нещо ми позволи. Благодаря! - person jmease; 13.10.2011

Тъй като rmiles е null, когато потребителят щракне върху "отказ"... така че rmiles.indexOf създава грешка/изключение и убива цикъла.

person Richard JP Le Guen    schedule 13.10.2011