#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
приводит к ошибке / исключению и завершает цикл.