Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 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);
Ответить с цитированием
  #2 (permalink)  
Старый 31.05.2014, 13:42
sinistral
Посмотреть профиль Найти все сообщения от melky
 
Регистрация: 28.03.2011
Сообщений: 5,418

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

ну и ещё нужно определить функцию isNull, потому что в стандартной библиотеке её нет.
Ответить с цитированием
  #3 (permalink)  
Старый 31.05.2014, 14:04
Новичок на форуме
Отправить личное сообщение для Живой Человек Посмотреть профиль Найти все сообщения от Живой Человек
 
Регистрация: 31.05.2014
Сообщений: 6

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

тоже не получалось.
Заранее благодарю.
Ответить с цитированием
  #4 (permalink)  
Старый 31.05.2014, 14:10
sinistral
Посмотреть профиль Найти все сообщения от melky
 
Регистрация: 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) : 
"Ну и зачем так делать?";


(похоже, спойлеры поломали... код внутри будет видно, если моё сообщение процитировать)
Ответить с цитированием
  #5 (permalink)  
Старый 31.05.2014, 14:22
Новичок на форуме
Отправить личное сообщение для Живой Человек Посмотреть профиль Найти все сообщения от Живой Человек
 
Регистрация: 31.05.2014
Сообщений: 6

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


Но я уже так пробовал. Если такой код запустить, то он вообще почему-то отказывается выводить модальное окно.
Ответить с цитированием
  #6 (permalink)  
Старый 31.05.2014, 15:21
Профессор
Отправить личное сообщение для jsnb Посмотреть профиль Найти все сообщения от jsnb
 
Регистрация: 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.
Ответить с цитированием
  #7 (permalink)  
Старый 31.05.2014, 15:34
Новичок на форуме
Отправить личное сообщение для Живой Человек Посмотреть профиль Найти все сообщения от Живой Человек
 
Регистрация: 31.05.2014
Сообщений: 6

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

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

Последний раз редактировалось Живой Человек, 31.05.2014 в 15:40.
Ответить с цитированием
  #8 (permalink)  
Старый 31.05.2014, 15:37
Профессор
Отправить личное сообщение для jsnb Посмотреть профиль Найти все сообщения от jsnb
 
Регистрация: 15.03.2014
Сообщений: 561

Сообщение от Живой Человек Посмотреть сообщение
И так я тоже пробовал, но он вообще с такой конструкцией тоже вообще не выводит модальное окно. Даже не знаю что и думать. Вроде всё правильно.
Что значит не выводит? Вот тебе этот код в работе:
http://learn.javascript.ru/play/xCaKx
Всё прекрасно выводится.
Ответить с цитированием
  #9 (permalink)  
Старый 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> - это была единственная разница между моим кодом(я его раньше пробовал) и вашим. В любом случае проблема решена и спасибо вам.
Ответить с цитированием
  #10 (permalink)  
Старый 31.05.2014, 15:58
Профессор
Отправить личное сообщение для jsnb Посмотреть профиль Найти все сообщения от jsnb
 
Регистрация: 15.03.2014
Сообщений: 561

Сообщение от Живой Человек Посмотреть сообщение
Может потому что я пренебрёг тегами <body> и не закрыл </html>
Бедные браузеры, какую только ахинею им не пытаются скормить.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
смена картинок при нажатии sdff Общие вопросы Javascript 15 08.02.2014 17:08
Присваивание класса при нажатии на ссылку skorpeeon Элементы интерфейса 10 25.07.2013 20:07
Блок должен перемещаться из одной точки в другую, а при повторном нажатии обратно Ser12345678 jQuery 2 17.07.2012 12:18
SyntaxHighlighter подсветка при нажатии faraday Общие вопросы Javascript 3 31.03.2012 23:43
Выбранный текст в select при нажатии на кнопку "добавить" появлялся в select'e Адриан Общие вопросы Javascript 2 31.01.2012 13:38