Как сделать поле обязательным
Короткий ответ
Добавьте полю атрибут required — браузер не отправит форму, пока его не заполнят:
<form>
<label>Name <input name="name" required></label>
<button>Send</button>
</form>Нажмите «Send» с пустым полем: появится подсказка браузера, а фокус перейдёт к полю.
Звёздочка у подписи
Обязательные поля принято отмечать звёздочкой. Её можно добавить в CSS, а псевдокласс :has() найдёт подпись с обязательным полем внутри:
<style>
label { display: block; margin-bottom: 8px; }
label:has(:required)::after { content: " *"; color: crimson; }
</style>
<form>
<label>Email <input type="email" required></label>
<label>Phone <input type="tel"></label>
</form>Объясните звёздочку один раз над формой: «Поля со звёздочкой обязательны».
Флажки и переключатели
required работает и у чекбокса — например, для согласия с условиями. У группы радиокнопок с одним name атрибут достаточно поставить одной из них.
Частая ошибка
Поле, состоящее только из пробелов, считается заполненным: required проверяет лишь, что значение не пустое. Кроме того, проверку в браузере легко обойти. Поэтому данные из формы всё равно проверяют на сервере — браузерная проверка лишь удобство для пользователя.
Функции из этого ответа
- required — Делает поле обязательным: форма не отправится, пока оно пустое.
- :required — Срабатывает у полей с атрибутом `required`; `:optional` — у полей без него.
- <form> — Форма: собирает данные из полей и отправляет их на сервер.
- <label> — Подпись к полю формы.
- ::after — Создаёт виртуальный последний дочерний элемент — для значков, пометок и украшений после содержимого.