Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   promt при нажатии "отмена" выводит 0, а не моё сообщение. (https://javascript.ru/forum/misc/47615-promt-pri-nazhatii-otmena-vyvodit-0-ne-mojo-soobshhenie.html)

Живой Человек 31.05.2014 13:27

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);

melky 31.05.2014 13:42

дело в том, что при нажатии на "отмена" или Esc, prompt возвратит null. А +null - это 0. Так что в test при нажжатии на "Отмена" будет 0

ну и ещё нужно определить функцию isNull, потому что в стандартной библиотеке её нет.

Живой Человек 31.05.2014 14:04

ТО что +null в моём случае возвращает ноль, я понимаю.
Цитата:

Сообщение от melky (Сообщение 314130)
ну и ещё нужно определить функцию isNull, потому что в стандартной библиотеке её нет.

Я не знаю как прописать функцию isNull. Покажите пожалуйста кусок кода. Я пробовал и без неё простым условием:
test == 0 ? "Ну и зря!" :

тоже не получалось.
Заранее благодарю.

melky 31.05.2014 14:10

Цитата:

Сообщение от Живой Человек (Сообщение 314133)
ТО что +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

Да, я увидел ваш спойлер:
var test2 = test == 0 ? "Ну и зря!" :
!isNaN(test) ? put(test, 100) : 
"Ну и зачем так делать?";


Но я уже так пробовал. Если такой код запустить, то он вообще почему-то отказывается выводить модальное окно.:(

jsnb 31.05.2014 15:21

Не понимаю к чему все эти извращения... Или сделать всё на тернарных операторах это принципиально?
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);

Живой Человек 31.05.2014 15:34

И так я тоже пробовал, но он вообще с такой конструкцией тоже вообще не выводит модальное окно. Даже не знаю что и думать. Вроде всё правильно.

Да, второй ваш код работает, но мне надо чтобы было два разных сообщения.
1) Если это не число(!isNaN(+test)), то вывести "Ну и зачем так делать?".
2) А если отмена(то есть null), то вывести "Ну и зря!". И именно так почему-то не получается.

jsnb 31.05.2014 15:37

Цитата:

Сообщение от Живой Человек (Сообщение 314142)
И так я тоже пробовал, но он вообще с такой конструкцией тоже вообще не выводит модальное окно. Даже не знаю что и думать. Вроде всё правильно.

Что значит не выводит? Вот тебе этот код в работе:
http://learn.javascript.ru/play/xCaKx
Всё прекрасно выводится.

Живой Человек 31.05.2014 15:51

<!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> - это была единственная разница между моим кодом(я его раньше пробовал) и вашим. В любом случае проблема решена и спасибо вам.

jsnb 31.05.2014 15:58

Цитата:

Сообщение от Живой Человек (Сообщение 314150)
Может потому что я пренебрёг тегами <body> и не закрыл </html>

Бедные браузеры, какую только ахинею им не пытаются скормить.


Часовой пояс GMT +3, время: 02:38.