2011-07-24 5 views
7

私はなぜ知っているが、私はこの問題を解決する方法を知ってはいけない、このjqueryのコードを使用して、無限のサイクルを持っています:フォームを無期限に入力せずに検証して提出しますか?

<form id="submitme"> 
    <input value="" name="n1" id="n1" type="text"/> 
    <input value="Send" type="button"/> 
</form> 
<script> 
    $('#submitme').bind('submit', function() { 
     $.post('validate.php', 'value=' + $('#n1').val(), function (data) { 
      if (data == "true") 
       $('#submitme').submit(); 
     }); 
    }); 
</script> 
+0

がなぜこの質問は、downvotedでしたか?それは私にとって完全に明確かつ合理的な質問のように見えます。 downvotingするときはコメントを残してください。私の+1。 –

答えて

3

jQuery.validateプラグインは、このの世話をすると、私は強く、それを使ってあなたをお勧めします:

$('#submitme').validate({ 
    rules: { 
     n1: { 
      remote: { 
       url: 'validate.php', 
       type: 'post' 
      } 
     } 
    } 
}); 

しかし、あなたはそれを別の可能性を使用しない場合はそうのように、グローバル変数を使用することです:

$('#submitme').submit(function() { 
    if (!$.formSubmitting) { 
     var $form = $(this); 
     $.post('validate.php', { value: $('#n1').val() }, function (data) { 
      if (data == 'true') { 
       // set the global variable to true so that we don't enter 
       // the infinite loop and directly submit the form 
       $.formSubmitting = true; 
       $form.submit(); 
      } 
     }); 
     return false; 
    } 

    return true;      
}); 

だけの発言:BUあなたがフォームの中に入れたttonはsubmitボタンではないので、それをクリックするとsubmitハンドラがトリガされません。私はjQueryの専門家ではないけど、あなたは、アクションのイベントハンドラを記述したときに、それが実行されるよりも、プロトタイプでは、あなたは、デフォルトの動作を停止しない

<input value="Send" type="submit" /> 
0

:あなたはそれが送信ボタンを作る必要がありますすべてのコールバック機能が完了した後だから、単にIF-else文をひっくり返すことにより、あなたは無限ループを回避することができるはずです。

$('#submitme').bind('submit', function(event) { 
    $.post('validate.php', 'value=' + $('#n1').val(), function (data) { 
    if (data != "true") 
     // if validation has failed, prevent default action (submit) 
     event.preventDefault(); 
    }); 
    // if default action was not prevented it will be executed 
}) 
+0

はい、ここでは、デフォルトのアクションを実行することを考えています。しかし、AJAXリクエストが成功した場合にのみこれを実行してください。したがって、フォームを提出する必要があります。あなたのコードでは、 'preventDefault'メソッドを早期に呼び出すことは決してないので、フォームはすぐに提出され、検証を実行する必要があるAJAXリクエストを実行する時間さえありません。 –

0

を私はこの解決策を見つけた:

<form id="submitme"> 
    <input value="" name="n1" id="n1" type="text"/> 
    <input value="Send" type="button"/> 
</form> 
<script> 
    $('#submitme').bind('submit', function() { 
     if ($.data($('#submitme'), 'validated')) 
      return true; 
     $.post('validate.php', 'value=' + $('#n1').val(), function (data) { 
      if (data == "true") { 
       $.data($('#submitme'), 'validated', true); 
       $('#submitme').submit(); 
      } 
     }); 
     return false; 
    }); 
</script> 
関連する問題