ユーザーからの数値入力を受け入れるフォームがあります。フォームの送信時に、JS関数が呼び出されてフォームのステータスがチェックされます(パラメーターに問題がない場合など)。そのアクションの1つは、AJAXリクエストを開始して、そのパラメーター(フォームから読み取られる)に応じて2つの値を受け取ることです。したがって、フォームの送信時に実行されるCheckForm()という関数があり、その中にAJAXリクエストを開始するブロックがあります。
var error = 0;
function CheckForm() { // run on form submit
var items = $('myitems');
if (items != undefined || items != null) {
items.each(function() {
if (!isNaN($(this).val())) { // check for number
$.get('myurl', {
// parameters
},
function(data) {
if (data != "0") {
if (condition) error = 1;
}
});
}
if (error == 1) return false;
}); // end each function
if (error == 1) {
alert("You have made an error.");
error = 0;
return false;
}
}
return true;
}
また、チェック中に何か問題が発生したかどうかをチェックするために、グローバル変数(エラー)を宣言しました。myitemsは、チェックが実行されるhtml要素のコレクションです。したがって、この関数はフォーム送信クリックイベントにバインドされ、送信時に実行されます。
質問:これは機能しません。アラートが表示され、ユーザーが最初に[OK]ボタンをクリックしなくても、ブラウザーページが即座に更新(フォーム送信)されます。
これを実装する別の方法はありますか?