HTMLInputElement: reportValidity() メソッド
        
        
          
                Baseline
                
                  Widely available
                
                
              
        
        
        
          
                
              
                
              
                
              
        
        
      
      This feature is well established and works across many devices and browser versions. It’s been available across browsers since 2018年12月.
reportValidity() は HTMLInputElement インターフェイスのメソッドで、 checkValidity() メソッドと同じ検証のチェック手順を実行します。値が無効であった場合、このメソッドはその要素に invalid イベントを発行し、(そのイベントがキャンセルされなければ)ユーザーに問題を報告します。
構文
reportValidity()
引数
なし。
返値
要素を検証して問題がなければ true を返し、それ以外の場合は false を返します。
例
>基本的な使用
HTML
必須の数値フィールドと、フォームのチェックボタンと送信ボタンの 2 つのボタンを設置したフォームを設置します。
<form action="#" method="post">
  <p>
    <label for="age">年齢 (21 ~ 65) </label>
    <input type="number" name="age" required id="age" min="21" max="65" />
  </p>
  <p>
    <button type="submit">送信</button>
    <button type="button" id="report">reportValidity()</button>
  </p>
  <p id="log"></p>
</form>
JavaScript
"reportValidity()" ボタンが押された場合、reportValidity() メソッドを使用して、入力値が制約を満たしているかどうかを確認します。返値をログに記録します。false の場合、検証メッセージも表示し、invalid イベントを捕捉します。
const output = document.querySelector("#log");
const reportButton = document.querySelector("#report");
const ageInput = document.querySelector("#age");
ageInput.addEventListener("invalid", () => {
  console.log("invalid イベントが発行されました。");
});
reportButton.addEventListener("click", () => {
  const reportVal = ageInput.reportValidity();
  output.innerHTML = `"reportValidity()" の返値: ${reportVal}`;
  if (!reportVal) {
    output.innerHTML += `<br />検証メッセージ: "${ageInput.validationMessage}"`;
  }
});
結果
false の場合、値が未入力、21 未満、65 超、または無効な場合、invalid イベントがコンソールに記録されます。
独自のエラーメッセージ
この例は、独自のエラーメッセージが、値が有効であるにもかかわらず、false の返値を引き起こす可能性があることを示しています。
HTML
前の例の HTML に[問題を修正]ボタンを追加します。
<button type="button" id="fix">問題を修正</button>
JavaScript
上記の基本例の JavaScript を拡張し、HTMLInputElement.setCustomValidity() メソッドを使用して独自のエラーメッセージを提供する関数を追加します。 validateAge() 関数は、入力が有効であり、enableValidation 変数が true の場合にのみエラーメッセージを空文字列に設定します。ただし、enableValidation は[問題を修正]ボタンが押されるまでは false になります。
const output = document.querySelector("#log");
const reportButton = document.querySelector("#report");
const ageInput = document.querySelector("#age");
const fixButton = document.querySelector("#fix");
let enableValidation = false;
fixButton.addEventListener("click", (e) => {
  enableValidation = true;
  fixButton.innerHTML = "エラーを修正しました";
  fixButton.disabled = true;
});
reportButton.addEventListener("click", () => {
  validateAge();
  const reportVal = ageInput.reportValidity();
  output.innerHTML = `"reportValidity()" の返値: ${reportVal}`;
  if (!reportVal) {
    output.innerHTML += `<br />検証メッセージ: "${ageInput.validationMessage}"`;
  }
});
const validateAge = () => {
  const validityState_object = ageInput.validity;
  if (validityState_object.valueMissing) {
    ageInput.setCustomValidity("年齢を入力してください(必須)");
  } else if (ageInput.rangeUnderflow) {
    ageInput.setCustomValidity("値が小さすぎます");
  } else if (ageInput.rangeOverflow) {
    ageInput.setCustomValidity("値が大きすぎます");
  } else if (enableValidation) {
    // 有効でかつ enableValidation が true に設定されている場合は true
    ageInput.setCustomValidity("");
  }
};
結果
年齢を入力する前に[reportValidity()]ボタンを起動すると、required の制約検証を満たさないため、reportValidity() メソッドは false を返します。このメソッドは入力に対して invalid イベントを発生させ、ユーザーに問題を報告し、独自のエラーメッセージ「年齢を入力してください(必須)」を表示します。独自のエラーメッセージが設定されている限り、[reportValidity()]ボタンを起動すると、有効な年齢を選択してもエラーが表示され続けます。検証を有効にするには、独自のエラーメッセージを空文字列に設定する必要があります。これは、[問題を修正]ボタンをクリックすることで行います。
仕様書
| Specification | 
|---|
| HTML> # dom-cva-reportvalidity-dev> | 
ブラウザーの互換性
Loading…
関連情報
- HTMLInputElement.checkValidity()
- <input>
- <form>
- 学習: クライアント側フォーム検証
- ガイド: 制約検証
- CSS の :validおよび:invalid擬似クラス