31.05.2014, 13:27
|
Новичок на форуме
|
|
Регистрация: 31.05.2014
Сообщений: 6
|
|
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);
|
|
31.05.2014, 13:42
|
sinistral
|
|
Регистрация: 28.03.2011
Сообщений: 5,418
|
|
дело в том, что при нажатии на "отмена" или Esc, prompt возвратит null. А +null - это 0. Так что в test при нажжатии на "Отмена" будет 0
ну и ещё нужно определить функцию isNull, потому что в стандартной библиотеке её нет.
|
|
31.05.2014, 14:04
|
Новичок на форуме
|
|
Регистрация: 31.05.2014
Сообщений: 6
|
|
ТО что +null в моём случае возвращает ноль, я понимаю.
Сообщение от melky
|
ну и ещё нужно определить функцию isNull, потому что в стандартной библиотеке её нет.
|
Я не знаю как прописать функцию isNull. Покажите пожалуйста кусок кода. Я пробовал и без неё простым условием:
test == 0 ? "Ну и зря!" :
тоже не получалось.
Заранее благодарю.
|
|
31.05.2014, 14:10
|
sinistral
|
|
Регистрация: 28.03.2011
Сообщений: 5,418
|
|
Сообщение от Живой Человек
|
ТО что +null в моём случае возвращает ноль, я понимаю.
Я не знаю как прописать функцию isNull. Покажите пожалуйста кусок кода. Я пробовал и без неё простым условием:
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) :
"Ну и зачем так делать?";
(похоже, спойлеры поломали... код внутри будет видно, если моё сообщение процитировать)
|
|
31.05.2014, 14:22
|
Новичок на форуме
|
|
Регистрация: 31.05.2014
Сообщений: 6
|
|
Да, я увидел ваш спойлер:
var test2 = test == 0 ? "Ну и зря!" :
!isNaN(test) ? put(test, 100) :
"Ну и зачем так делать?";
Но я уже так пробовал. Если такой код запустить, то он вообще почему-то отказывается выводить модальное окно.
|
|
31.05.2014, 15:21
|
Профессор
|
|
Регистрация: 15.03.2014
Сообщений: 561
|
|
Не понимаю к чему все эти извращения... Или сделать всё на тернарных операторах это принципиально?
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);
Последний раз редактировалось jsnb, 31.05.2014 в 15:27.
|
|
31.05.2014, 15:34
|
Новичок на форуме
|
|
Регистрация: 31.05.2014
Сообщений: 6
|
|
И так я тоже пробовал, но он вообще с такой конструкцией тоже вообще не выводит модальное окно. Даже не знаю что и думать. Вроде всё правильно.
Да, второй ваш код работает, но мне надо чтобы было два разных сообщения.
1) Если это не число(!isNaN(+test)), то вывести "Ну и зачем так делать?".
2) А если отмена(то есть null), то вывести "Ну и зря!". И именно так почему-то не получается.
Последний раз редактировалось Живой Человек, 31.05.2014 в 15:40.
|
|
31.05.2014, 15:37
|
Профессор
|
|
Регистрация: 15.03.2014
Сообщений: 561
|
|
Сообщение от Живой Человек
|
И так я тоже пробовал, но он вообще с такой конструкцией тоже вообще не выводит модальное окно. Даже не знаю что и думать. Вроде всё правильно.
|
Что значит не выводит? Вот тебе этот код в работе:
http://learn.javascript.ru/play/xCaKx
Всё прекрасно выводится.
|
|
31.05.2014, 15:51
|
Новичок на форуме
|
|
Регистрация: 31.05.2014
Сообщений: 6
|
|
<!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> - это была единственная разница между моим кодом(я его раньше пробовал) и вашим. В любом случае проблема решена и спасибо вам.
|
|
31.05.2014, 15:58
|
Профессор
|
|
Регистрация: 15.03.2014
Сообщений: 561
|
|
Сообщение от Живой Человек
|
Может потому что я пренебрёг тегами <body> и не закрыл </html>
|
Бедные браузеры, какую только ахинею им не пытаются скормить.
|
|
|
|