Глиф Учебники

Как получить значение input

Справочник · JavaScript · 1 минута чтения

Найдите поле и прочитайте его свойство value — в тот момент, когда значение нужно, например по нажатию кнопки:

HTML
<input id="name" placeholder="Ваше имя">
<button id="ok">Готово</button>
<p id="result"></p>
JavaScript
const input = document.querySelector("#name");
const result = document.querySelector("#result");

document.querySelector("#ok").addEventListener("click", () => {
  const name = input.value.trim();
  result.textContent = name === "" ? "Имя не введено" : "Привет, " + name + "!";
});

После нажатия «Готово» под полем появится приветствие с введённым именем. trim() убирает пробелы по краям, чтобы строка из одних пробелов считалась пустой.

Почему value пустой

Самая частая ошибка — прочитать значение один раз, при загрузке страницы:

JavaScript
const name = document.querySelector("#name").value;

document.querySelector("#ok").addEventListener("click", () => {
  console.log(name);
});

В момент загрузки поле пустое, в name попадает "", и дальше там ничего не меняется. Переменная хранит значение, а не связь с полем. Читайте input.value внутри обработчика, как в первом примере.

Другие причины: селектор нашёл не то поле (на странице два с похожим id) или value берут у обёртки, а не у самого <input>.

Число из поля

value всегда строка, даже у <input type="number">. Перед расчётами переведите её в число:

JavaScript
const qty = Number(document.querySelector("#qty").value);

У полей type="number" есть и valueAsNumber: сразу число, а для пустого поля — NaN. Подробно о переводе — в справке Как перевести строку в число.

Флажок, список, переключатели

HTML
<input type="checkbox" id="agree"> Согласен
<select id="city">
  <option value="minsk">Минск</option>
  <option value="grodno">Гродно</option>
</select>
<input type="radio" name="size" value="s"> S
<input type="radio" name="size" value="m" checked> M
JavaScript
const agreed = document.querySelector("#agree").checked;
const city = document.querySelector("#city").value;
const size = document.querySelector('input[name="size"]:checked')?.value;

Следить за вводом

Событие input срабатывает при каждом изменении поля — удобно для подсказок и счётчиков символов:

JavaScript
const field = document.querySelector("#name");
const counter = document.querySelector("#counter");

field.addEventListener("input", () => {
  counter.textContent = field.value.length + " символов";
});

Вся форма сразу

Если полей много, их значения собирает FormData — по атрибутам name:

JavaScript
document.querySelector("form").addEventListener("submit", (event) => {
  event.preventDefault();
  const data = Object.fromEntries(new FormData(event.target));
  console.log(data);
});

В data окажется объект вида { name: "Аня", city: "minsk" }. Поля без атрибута name в него не попадут.