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.required
JavaScript
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"
等)も併用