Запрос Javascript отменен, не работает в цикле While

#javascript #prompt

#javascript #приглашение

Вопрос:

У меня есть приглашение, которое в основном является обязательным полем и не может содержать десятичное число. У меня есть цикл 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");
    }
  

Комментарии:

1. Это звучит как антихрист пользовательского опыта. Есть ли причина, по которой вы используете подсказки и оповещения вместо обязательного поля в лайтбоксе или что-то подобное?

Ответ №1:

Я считаю, что проблема в вашем while состоянии — вы выполняете побитовое ИЛИ | на всех условиях. Это означает, что rmiles.indexOf(".") всегда вызывается, даже если rmiles установлено значение null by prompt при нажатии кнопки Отмена. Это связано с тем, что побитовое ИЛИ не приведет к короткому замыканию.

Попробуйте логическое ИЛИ || , которое вызывает короткое замыкание и, таким образом, позволяет избежать ошибки нулевой ссылки:

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

Комментарии:

1. Это полностью сработало. Я приму ваш ответ через несколько минут, как только это позволит мне. Спасибо!

Ответ №2:

Потому rmiles что имеет значение null, когда пользователь нажимает «Отмена»… это rmiles.indexOf приводит к ошибке / исключению и завершает цикл.