実際のフォーム送信をトリガーするだけです - http://jsfiddle.net/tj_vantoll/ZN29S/。
実際のフォーム送信が実行さcheckValidity
れ、バブル エラーが表示invalid
され、必要に応じてイベント ハンドラが呼び出されます。
フォームが実際に送信されないようにするには、デフォルト アクションを防止するsubmit
イベント ハンドラーをにアタッチしてから<form>
、AJAX 呼び出しを実行する必要があります。
これが機能するのsubmit
は、フォームがすべての制約を満たさない限り (つまり、有効なデータがない場合)、イベントが発生しないためです。したがって、明示的な呼び出しcheckValidity
は必要ありません。
コメントに対処するために (11/7/12) を編集します。
この場合の実際のフォーム送信とは、単に送信ボタンで行われた非 AJAX 送信を指していたにすぎません。ネイティブ バブルを表示し、フォーカスを適切なフォーム要素に変更するには、これが唯一の方法です。送信ボタンがない場合は、非表示のボタンを作成し、それを使用して送信をトリガーできます。それはまだ動作します。
このアプローチは理想的とは言えませんが、サポートしているすべてのブラウザで機能します。呼び出しではなくこのハックが使用される唯一の理由は、ネイティブ検証をトリガーしないform.submit()
ためです。form.submit()
ここでの問題は、検証をトリガーする API がないことではなく、呼び出しform.submit()
がないことです。仕様では、 「ユーザー エージェントがフォーム要素フォームの制約を静的に検証する必要がある」場合は常に、制約の検証を実行する必要があると述べています。通話が適用されない理由がわかりません。form.submit()
checkValidity
DOES は、ネイティブ フォームの送信と同じアルゴリズムを実行することに注意してください。したがって、デフォルトのバブルを自由にオフにして、独自のバブルを実装できます。たとえば、このようなものです。