3

私は次のようなフォームを持っています:

<form name="form" id="form" action="sub.php" onsubmit="return checkField();">
.
.
.
</form>

頭の中で私は持っています:

<script>
   function checkField(){
      var fieldToCheck = $('#field').val();
      $.post("checkField.php",{field:fieldTocheck},function(msg)){
         return msg=='ok';
      }
   }
</script>

問題は、フォームが常に送信されることです..内部の戻り値$.postは、関数ではなく成功の関数であることを知っていますcheckField()..だから私は何ができますか? 誰かが私を助けることができますか?ありがとう!!

4

4 に答える 4

1

まず、submit イベントを防止します。

$('#form').submit(function(event) {
event.preventDefault();
}

2. すべて問題なければ、送信を続行します

   function checkField(){
      var fieldToCheck = $('#field').val();
      $.post("checkField.php",{field:fieldTocheck},function(msg)){
         $('#form').submit();
      }
   }
于 2012-07-01T12:03:42.677 に答える
1

フォームで指定した onsubmit="return checkField();"

しかし、あなたの checkField() は何も返しません。

中断して投稿しないことを示すには false を返すか、投稿を続行することを示す何かを返す必要があります。

これを試して:

function checkField(){
  var fieldToCheck = $('#field').val();
  var okToSubmit = false;
  $.post("checkField.php",{field:fieldTocheck},function(msg)){
     if (msg=='ok')
        okToSubmit = true;
  }
  return okToSubmit();
}

また、checkField へのポストは同期 (async = False) である必要があります。そうしないと、フィールドが正しいかどうかをチェックする前に checkField() 関数が現在の値 (false) を返すため、偽陰性が発生します。

テストしていません:

function checkField(){
  return $.post("checkField.php",{field:$('#field').val()},function(msg)){
     return ('ok' == msg);
  }
}

(この最後の形式はもっとぎこちなく、最初の形式に簡単にテストを追加することはできません)。

于 2012-07-01T12:04:30.297 に答える
1

これを試して、

 function checkField(){
      var fieldToCheck = $('#field').val();
      $.post("checkField.php",{field:fieldTocheck},function(msg)){
         return msg=='ok';
         // pure js submit() to stop checkField() to be called again
         $('#form')[0].submit();  
      }
      return false;
   }
于 2012-07-01T12:00:40.533 に答える
0

最も難しいと思うのは、リクエストが処理される前に checkField 関数で何らかの値を返さなければならないということです。そのため、解決策の 1 つは false を返し、成功した場合にのみフォームの詳細を投稿することです。

<script>
function checkField(){
  var fieldToCheck = $('#field').val();
  $.post("checkField.php",{field:fieldTocheck},function(msg){
     if (msg=='ok') 
     {
        var $form = $('#form'),
        par = $form.serialize();
        $.post($form.attr('action'), par, function(){});
     }
  }
  return false;
});
</script>
于 2012-07-01T12:03:53.113 に答える