promt при нажатии "отмена" выводит 0, а не моё сообщение.
Доброго дня всем!
В данный момент только начал изучать JavaScript, так что не судите строго. Суть такова: не получается заставить promt(alert) выводить моё сообщение при нажатии пользователем "Отмена" или Escape. Он неуклонно выводит ноль, а не моё сообщение. Делаю проверку на null, но никакой реакции, а точнее он тогда к тому же ещё и не хочет выводить моё Else-условие. Пробовал вставлять проверку на null и в функцию и в глобальную переменную, но не получается. Подскажите новичку, где у меня ошибка? Заранее благодарю. Вот эту проверку пробовал вставить - isNull(test) ? "Ну и зря!" : Вот мой код: function put(a, b) { return a < b ? a : /* пробовал сюда засунуть isNull(test) ? "Ну и зря!" : */ a + 526 + " - Прикольно, правда?"; } var test = +prompt("Тест", "Введите любое число!"); var test2 = !isNaN(test) ? put(test, 100) : /* пробовал сюда засунуть isNull(test) ? "Ну и зря!" : */ "Ну и зачем так делать?"; alert(test2); |
дело в том, что при нажатии на "отмена" или Esc, prompt возвратит null. А +null - это 0. Так что в test при нажжатии на "Отмена" будет 0
ну и ещё нужно определить функцию isNull, потому что в стандартной библиотеке её нет. |
ТО что +null в моём случае возвращает ноль, я понимаю.
Цитата:
test == 0 ? "Ну и зря!" : тоже не получалось. Заранее благодарю. |
Цитата:
взглянем поближе на вот этот кусок : var test2 = !isNaN(test) ? put(test, 100) : test == 0 ? "Ну и зря!" : "Ну и зачем так делать?"; если test будет равна нулю, то !isNaN(0) вернёт true, потому что 0 - это число. вкратце, можно это дело разрешить так (это спойлер): var test2 = test == 0 ? "Ну и зря!" : !isNaN(test) ? put(test, 100) : "Ну и зачем так делать?"; (похоже, спойлеры поломали... код внутри будет видно, если моё сообщение процитировать) |
Да, я увидел ваш спойлер:
var test2 = test == 0 ? "Ну и зря!" : !isNaN(test) ? put(test, 100) : "Ну и зачем так делать?"; Но я уже так пробовал. Если такой код запустить, то он вообще почему-то отказывается выводить модальное окно.:( |
Не понимаю к чему все эти извращения... Или сделать всё на тернарных операторах это принципиально?
function put(a, b) { return a < b ? a : a + 526 + " - Прикольно, правда?"; } var test = prompt("Тест", "Введите любое число!"); if (test === null) { alert('отмена'); } else { var test2 = !isNaN(+test) ? put(test, 100) : "Ну и зачем так делать?"; alert(test2); } Ну или если уж так хочется одним тернарным оператором, то как-то так: function put(a, b) { return a < b ? a : a + 526 + " - Прикольно, правда?"; } var test = prompt("Тест", "Введите любое число!"); var test2 = !(test === null) && !isNaN(+test) ? put(test, 100) : "Ну и зачем так делать?"; alert(test2); |
И так я тоже пробовал, но он вообще с такой конструкцией тоже вообще не выводит модальное окно. Даже не знаю что и думать. Вроде всё правильно.
Да, второй ваш код работает, но мне надо чтобы было два разных сообщения. 1) Если это не число(!isNaN(+test)), то вывести "Ну и зачем так делать?". 2) А если отмена(то есть null), то вывести "Ну и зря!". И именно так почему-то не получается. |
Цитата:
http://learn.javascript.ru/play/xCaKx Всё прекрасно выводится. |
<!DOCTYPE HTML> <html> <head> </head> <body> <script> function put(a, b) { return a < b ? a : a + 526 + " - Прикольно, правда?"; } var test = prompt("Тест", "Введите любое число!"); if (test === null) { alert("Ну и зря!"); } else { var test2 = !isNaN(+test) ? put(test, 100) : "Ну и зачем так делать?"; alert(test2); } </script> </body> </html> Да, спасибо, этот код работает как мне надо. Скопировал его и всё выводит. А у меня не выводило окно с таким же кодом. Может потому что я пренебрёг тегами <body> и не закрыл </html> - это была единственная разница между моим кодом(я его раньше пробовал) и вашим. В любом случае проблема решена и спасибо вам. |
Цитата:
|
Часовой пояс GMT +3, время: 02:38. |