Проверка формы
Люди ошибаются: оставляют поле пустым, ставят пробел перед именем или пишут слово там, где нужно число. Прежде чем страница воспользуется тем, что набрали в форме, её скрипт это проверяет, а если что-то не так, сообщает, что именно, прямо рядом с полем.
Начните с trim(). Он возвращает текст без пробелов в начале и в конце; пробелы внутри остаются:
const name = " Анна Петрова ".trim();
console.log(`[${name}]`);[Анна Петрова]Поле, в котором одни пробелы, после этого даёт "", так что проверка на пустое поле ловит и его. Дальше можно проверить длину текста с помощью length. Рядом с каждым полем есть место для сообщения об ошибке, например <span id="nick-error"></span> (span — это кусочек текста внутри строки, здесь сразу после поля), и обработчик заполняет его или очищает, когда поле заполнено правильно:
form.addEventListener("submit", function (event) {
event.preventDefault();
const nick = nickInput.value.trim();
if (nick === "") {
nickError.textContent = "Введите ник.";
} else if (nick.length < 3) {
nickError.textContent = "В нике должно быть не меньше 3 символов.";
} else {
nickError.textContent = "";
result.textContent = `Привет, ${nick}!`;
}
});Очищать сообщение важно: без этого ошибка осталась бы на странице, даже когда пользователь уже исправил поле.
Числа. Number() превращает текст, который не является числом, в NaN, и найти его с помощью === нельзя. NaN не равно ничему, даже самому себе, поэтому age === NaN всегда false. Используйте Number.isNaN(age): оно даёт true, когда age равно NaN. Сравнения с NaN тоже всегда дают false: NaN < 1 — это false, поэтому проверка вроде age < 1 пропускает NaN. И помните, что пустое поле даёт Number(""), то есть 0.
Несколько полей. Хорошая форма показывает все свои проблемы сразу, а не по одной. Поэтому проверяйте каждое поле и запоминайте в переменной, было ли что-то не так:
let valid = true;
if (nick === "") {
nickError.textContent = "Введите ник.";
valid = false;
} else {
nickError.textContent = "";
}
if (Number.isNaN(age) || age < 1) {
ageError.textContent = "Введите свой возраст.";
valid = false;
} else {
ageError.textContent = "";
}
if (valid) {
result.textContent = `Привет, ${nick}!`;
}Только когда все поля заполнены правильно, форма выполняет свою работу.
Задание
- 1
Обрежьте имя: уберите пробелы по краям. Если имя пустое, покажите в
nameErrorтекстВведите своё имя., иначе очиститеnameError. Попробуйте отправить форму, где в имени одни пробелы. - 2
Проверьте количество билетов. Если это не число, или оно меньше 1, или больше 10, покажите в
ticketsErrorтекстВведите число от 1 до 10., иначе очистите его. - 3
Показывайте бронь в
resultтолько когда оба поля заполнены правильно, и с именем без лишних пробелов:Бронь: Анна, билетов: 2. Иначе очиститеresult. Если оба поля заполнены неправильно, оба сообщения показываются сразу.