jQueryの検証プラグインは、イベントハンドラでフォームsubmit
イベントをフック提出する前にそのフォームを検証するためにvalidate()
関数を呼び出し、検証が失敗した場合にフォームの送信を防止します。
jQueryを使用して各フォームのsubmit
イベントをフックし、フォームの下部に表示すると、プラグインハンドラの前に実行する独自のハンドラが追加されます。こうすることで、フォーム上でvalid()
関数を呼び出すことができ、完全なフォーム検証後に必要なカスタムコードを実行することができます。プラグインのvalid()
関数は、フォーム上でvalidate()
関数を呼び出し、成功/失敗のブール値を返します。成功/失敗を気にしない場合は、valid()
の代わりにvalidate()
に直接電話することができます。
フォームでvalid()
またはvalidate()
を呼び出すと、MVC3の控えめなクライアント検証でフォームが検証エラーでマークアップされますが、呼び出し後に何か他の操作を実行できるようになります。
私自身のsubmit()
ハンドラ(下記)とjQuery検証プラグインvalidate()
とvalid()
の関数にブレークポイントを設定しました。この実装では一度呼び出されるだけですので、完全なフォームの検証は複数回実行してはいけません。
もちろん、プラグインはfocus、blur、keyup、clickイベントもフックしているため、個々のフィールドのバリデーターはすでに複数回呼び出されているため、失敗/解決されたフォームフィールドについてユーザーに即座にフィードバックが提供されます。検証は、ユーザがフィールドに値を入力するまで実行されないという点で、怠惰です。ユーザーが値を入力してフィールドを離れると、フィールドは有効になります。フィールドが無効とマークされている場合、無効なフィールドが有効であることが判明するまで、さまざまなイベントで繰り返し検証されるため、再検証が賢明です。
ページの下部にある、すべてform
タグの下に次の文字を挿入します。書かれているように、$("form")
セレクタでは、ページ内のすべてのform
要素の送信イベントを処理します。もちろん、jQueryセレクタを使用して、特定のform
タグを検証用に選択することができます。検証を実行するときはいつでも、フォーム上でvalid()
またはvalidate()
と呼んで、一度実行するコードを実行してください。
<form>
...
</form>
<script type="text/javascript">
$("form").submit(function (e) {
if ($(this).valid() == false) {
alert("yo!"); // execute anything you want following validation
}
});
</script>
それとも、検証の結果を知っている気にしない場合:あなたのクラス定義の上[SessionState(SessionStateBehavior.Default)]
を入れて、
<script type="text/javascript">
$("form").submit(function (e) {
$(this).validate();
alert("yo!"); // execute anything you want following validation
});
</script>
私には少なくとも、あなたがしたいことはあまり明確ではありません。コードサンプルを追加したり、少し明確にすることができますか? –
更新が追加されました - うまくいけば、これはより明確な説明です! – Sniffer