Prompt: примеры (JAVASCRIPT)

Полное руководство по функции prompt с практическими примерами
Раздел: BOM, Диалоги
prompt(message?: string, default?: string): string | null

Основные сведения о функции prompt

Функция prompt является частью объекта window в браузерном JavaScript. Она предназначена для отображения диалогового окна с текстовым полем, позволяя пользователю ввести данные. Данная функция часто применяется для получения простых пользовательских данных, когда требуется минимальное взаимодействие без сложных форм.

Основное использование функции связано с получением строковых значений. Она блокирует выполнение скрипта до тех пор, пока пользователь не закроет окно, нажав OK, Отмена или клавишу Enter.

Аргументы функции

  • message (необязательный): Текстовая подсказка, отображаемая пользователю. Если не указан, окно может быть пустым.
  • default (необязательный): Строка, которая предварительно заполняет текстовое поле. Если не указана, поле будет пустым.

Возвращаемое значение

  • Если пользователь нажимает OK или Enter, функция возвращает строку, введенную в текстовое поле.
  • Если пользователь нажимает Отмена или закрывает окно другими способами, функция возвращает значение null.
  • Всегда возвращает строку или null, даже если в поле введены числа.

Простой пример использования

Базовый вызов с одним аргументом:

let name = prompt('Введите ваше имя:');
console.log(name);
// Если ввести 'Анна' и нажать OK, в консоли будет: 'Анна'

Использование с двумя аргументами:

let city = prompt('Введите город проживания:', 'Москва');
console.log(city);
// В поле будет значение 'Москва' по умолчанию. Если нажать OK, не меняя его, в консоли будет: 'Москва'

Обработка отмены ввода:

let age = prompt('Сколько вам лет?');
if (age === null) {
  console.log('Ввод отменен');
} else {
  console.log('Введенный возраст: ' + age);
}
// При нажатии Отмена в консоли будет: 'Ввод отменен'

Альтернативные методы в JavaScript

Модальное окно confirm

Функция confirm отображает диалоговое окно с сообщением и двумя кнопками: OK и Отмена. Возвращает логическое значение.

let isReady = confirm('Вы готовы продолжить?');
console.log(isReady); // true или false

Модальное окно alert

Функция alert показывает сообщение и одну кнопку OK. Не возвращает значения, используется только для информирования.

alert('Операция завершена успешно');

Кастомные модальные окна

Библиотеки (например, Bootstrap Modal) или собственные реализации на HTML/CSS/JS предоставляют больше контроля над внешним видом и поведением. Их предпочтительнее использовать для сложных форм, валидации и улучшенного пользовательского опыта.

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

Неучет возвращаемого null

При отмене ввода функция возвращает null. Попытка работать с этим значением как со строкой может вызвать ошибки.

let data = prompt('Введите число:');
let square = data * data; // Ошибка, если data = null
console.log(square);
// При отмене: TypeError

Сравнение без приведения типов

Поскольку prompt всегда возвращает строку, прямое сравнение с числами может дать неожиданный результат.

let number = prompt('Введите 10:');
if (number == 10) { // Нестрогое сравнение
  console.log('Совпадает с 10');
}
if (number === 10) { // Строгое сравнение
  console.log('Строго совпадает с 10'); // Этот код не выполнится
}
// Если ввести '10', первое условие выполнится, второе - нет.

Игнорирование пустой строки

Если пользователь нажмет OK, не вводя текст, функция вернет пустую строку (''), а не null.

let value = prompt('Введите что-нибудь:');
if (!value) {
  console.log('Пустая строка или отмена');
}

История изменений

Функция prompt существует с первых версий JavaScript и не претерпела значительных изменений в синтаксисе. Однако, современные браузеры могут блокировать или ограничивать её использование, так как модальные окна считаются плохим пользовательским опытом и могут использоваться для фишинга. Некоторые браузеры позволяют пользователям настраивать блокировку таких окон.

В спецификации HTML5 функция по-прежнему поддерживается, но рекомендуется избегать её в продакшн-коде в пользу более современных и удобных методов взаимодействия.

Расширенные примеры применения

Проверка и преобразование в число

Пример с обработкой ввода и преобразованием в число с проверкой.

Пример javascript
let input = prompt('Введите ваш возраст:');
if (input === null) {
  console.log('Отменено');
} else {
  let age = parseInt(input);
  if (isNaN(age)) {
    console.log('Это не число');
  } else {
    console.log(`Через 5 лет вам будет ${age + 5}`);
  }
}

Многострочная подсказка

Использование символа новой строки \n для форматирования.

Пример javascript
let answer = prompt('Пожалуйста, введите ваши данные:\n(Имя, Фамилия, Возрост)');

Цикл с проверкой корректности ввода

Повторный запрос, пока не будет получено корректное значение.

Пример javascript
let number;
do {
  let input = prompt('Введите положительное число:');
  if (input === null) {
    console.log('Отменено');
    break;
  }
  number = Number(input);
} while (isNaN(number) || number <= 0);
if (number) {
  console.log('Корень числа: ' + Math.sqrt(number));
}

Сохранение и использование значения по умолчанию

Использование предыдущего ввода как значения по умолчанию для следующего запроса (имитация памяти).

Пример javascript
let lastCity = '';
function askCity() {
  lastCity = prompt('Введите ваш город:', lastCity);
  if (lastCity !== null) {
    alert('Ваш город: ' + lastCity);
  }
}
// Первый вызов: поле пустое
// Последующие вызовы: поле содержит предыдущий ввод

Аналоги в других языках программирования

Python (консольный ввод)

Функция input() считывает строку из стандартного ввода.

name = input('Введите ваше имя: ')
print(f'Привет, {name}')

PHP

В веб-контексте данные обычно получают через формы ($_POST, $_GET). Для консольного скрипта можно использовать fgets(STDIN).

// console.php
echo 'Введите город: ';
$city = trim(fgets(STDIN));
echo 'Вы ввели: ' . $city;

C

Используются функции типа scanf() или fgets() для чтения из стандартного потока ввода.

#include <stdio.h>
int main() {
    char name[50];
    printf('Введите имя: ');
    scanf('%s', name);
    printf('Привет, %s\n', name);
    return 0;
}

Основное отличие от JavaScript prompt: эти методы обычно работают в консоли, а не в браузере.

JS prompt function comments

En
Prompt Displays a dialog with a message prompting the user to input some text.