したがって、送信をクリックすると、送信する前に検証を行いたいフォームがあります。かなり簡単だと思います。そのため、フォームに送信ハンドラーを設定し、AJAX チェックを実行するようにしました。終了したら、問題がなければ通常どおり送信します。
私はこれを試しましたが、非常に明白な理由で失敗しました:
$.when(checkUsername()).done(function (a) {
checkTitle();
checkMessage();
if (userValid && titleValid && messageValid) {
return true;
}
});
return false;
checkUsername
$.post
、 whileは、これらのフィールドに文字があるかどうかを確認checkTitle
しているだけです。各関数は、 、、および をcheckMessage
相対的に検証し、それらの値を true または false に設定します。2 つの入力フィールドとテキスト領域フィールドには、関連する各機能にぼかしが適用されているため、ユーザーが送信をクリックする前であっても、フォームは検証されています。userValid
titleValid
messageValid
したがって、明らかに、最後に false が返されると、フォームは送信されません。しかし、私はもともと有効なチェックを行っていませんでした(現在の戻り値は false です)。ユーザーが3つの有効なアイテムを入力した場合、フィールドを消去してそのままにしませんでした/ぼかし、送信を直接クリックしても、それでもAJAX がまだ処理中で、フィールドが 2 回目のチェックを受けていないためです。
基本的に、AJAX が終了するまでフォームの送信を待機する必要があります。しかし、submit()
関数は AJAX が終了する前に戻り値を処理します。送信時に AJAX をトリガーする必要があるため、完了にはできません。基本的に、キャッチ22。
私はそれを行うのが面倒だと感じる何かを思いつきましたが、現時点で私が考えることができる唯一の方法であり、これがそれを行う唯一の方法であるか、または他にどのようなオプションがあるかについてアドバイスを使用できます. AJAX 経由でフォームを送信できることは承知していますが、利用可能なオプションを確認したいと考えています。これは厄介な方法です:
if (validated) return true;
else {
$form = $(this);
$.when(checkUsername()).done(function (a) {
checkTitle();
checkMessage();
if (userValid && titleValid && messageValid) {
validated = true;
$form.submit();
}
});
return false;
}
この場合、ajax によってのみ設定されるマスター検証変数があり、システムは完了すると再送信します。