1

ユーザーからの数値入力を受け入れるフォームがあります。フォームの送信時に、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]ボタンをクリックしなくても、ブラウザーページが即座に更新(フォーム送信)されます。

これを実装する別の方法はありますか?

4

1 に答える 1

2

まず第一に、jQuery でセレクターを使用すると、結果が null または未定義になることはありません。

$('myitems').each(function()....

次に、非同期呼び出し (AJAX) を行っていることに注意する必要があります。つまり、呼び出しの 1 つが完了CheckFormする前に関数が戻る可能性があります。get

于 2012-04-28T19:55:46.703 に答える