The required attribute tells the browser not to allow the form to be submitted if the input field is empty.
required は 値の未入力をフォーム送信前に防止する 最も手軽な方法です。ブラウザはユーザーの入力を監視し、空欄のまま送信しようとすると自動でエラーメッセージとハイライトを表示します。
<input>, <select>, <textarea>(ただし type="hidden" や disabled 等は除外)text / email / url / tel / password / number … など大半のタイプで利用可。name を持つグループのどれか 1 つが選択されれば制約は満たされます。required を付けると「チェック必須」を示せます。複数必須なら JavaScript 併用。<select>size="1" かつ multiple 無しの場合、placeholder option が自動的に必須判定に利用されます。デフォルトメッセージは OS 言語に依存し、自動ローカライズされます。
HTML
<form>
<label for="email">メール:</label>
<input id="email" type="email" required>
<button>送信</button>
</form>
空欄送信 → ブラウザがブロック
値入力 → 送信成功
input.requiredJavaScript
if (el.required) …
input.checkValidity()JavaScript
form.checkValidity()
input.reportValidity()JavaScript
el.reportValidity()
input.setCustomValidity(msg)JavaScript
emailInput.addEventListener('input', e => {
if (e.target.validity.valueMissing) {
e.target.setCustomValidity('メールは必須です');
} else {
e.target.setCustomValidity('');
}
});
CSS
input:required:invalid { border: 2px solid red; }
input:required:valid { border: 2px solid green; }
input:optional { opacity: .8; }
:required / :optional で有無を判定
:valid / :invalid と組み合わせて状態別デザイン
スクリーンリーダーは多くの場合 required を自動アナウンスしますが、カスタム UI や旧ブラウザを考慮し aria-required="true" を明示すると確実。
エラーメッセージは role="alert" または aria-live="assertive" を併用し即時読み上げ。
input を JS で disabled → 再度有効化しても検証されないdisabled は制約検証対象外reportValidity()form.submit() を呼ぶとバリデーションが走らないform.requestSubmit() かボタンの .click() を使用required を追加しても即検証しないreportValidity() を呼ぶ<select> で最初の空 value オプションが選ばれたままdisabled hidden selected 属性で明示的に除外required)lang 属性と setCustomValidity() でローカライズtype="email" 等)も併用