2017-11-23 7 views
0

私はこのようなフォームを送信する前に10秒間遅延させようとしましたが、動作しませんでした。遅延しないことで、それはまだ真実に戻ります。javascriptを使用してチェックフォームを遅らせる方法は?

<form class="form" method="post" action="" ENCTYPE = "multipart/form-data" onsubmit="return checkform(this);" > 
    <input type="submit" name="submit" value="OK"> 
</form> 

<script language="JavaScript" type="text/javascript"> 
    function checkform (form) 
    { 
     var test = "1"; 
     setTimeout(function(){ 
      if(test != '0'){ 
       return false; 
      } 
      else 
      { 
       return true; 
      } 
     }, 10000); 
    } 
</script> 

javascriptを使用してチェックフォームを遅らせる方法を知りたいですか?

+0

あなたの目的はここですか? true/falseを返すだけです。遅延のポイントは何ですか? –

+0

@GetOffMyLawn実際には何も外部関数に返されません – charlietfl

+0

何の呼び出しチェックフォームですか?フォームのsubmitイベントにバインドされている場合は、preventDefault()を使用してデフォルトの動作をキャンセルする必要があります。 – delinear

答えて

0

checkForm機能に戻る必要があります。コールバック内のreturnは外部関数に戻りません。それがなかったとしても、それはない10秒後に

あなたがもう一度フォームを提出することにより、遅延の内側に再び

var allowSubmit = false; 

function checkform(form) { 
    if (allowSubmit) { 
    return true; 
    } else { 
    var test = "1"; 
    setTimeout(function() { 
     if (test === '1') { 
     // when validation passes resubmit with updated flag 
     allowSubmit = true; 
     form.submit(); 
     } 
    }, 10000); 

    return false; 
    } 
} 
0

を関数を呼び出すことができますので、あなたはフラグを使用することができますので、ここで問題があることで、即時でなければなりませんサブミット要求は、関数内で何かを返す場合と同じ結果になります。

function returnExplanation(){ 

    return 0; 
    console.log("You will never see me"); 

} 

あなたが復帰した後、コンソール内のテキストを見ることはありません:たとえば

あなたはこのような何かを持っていた場合。

送信機能は同じです。これを実現する他の方法はいくつかありますが、探していたものを達成するためにコードを少し修正しました。

<form class="form" id="submitForm" method="post" action="" ENCTYPE = "multipart/form-data"> 
     <input type="button" name="submit" value="OK"> 
    </form> 

    <script language="JavaScript" type="text/javascript"> 
     $(document).ready(function() { 
      $('#submitForm').on('click', function() 
      { 
       var test = 1; 
       setTimeout(
         function() 
         { 
          if (test !== 0) 
          { 
           console.log("false"); 
           return false; 
          } else 
          { 
           console.log("true"); 
           return true; 
          } 
         }, 10000); 
       $('#submitForm').submit(); 
      }); 
     }); 
    </script> 

私が最初にしたことは、フォームに「ID」を付けることでした。これにより、jQuery(またはjavascript)が通信する要素を簡単に解読できます。

次に、「onsubmit」属性を削除して、適切なjQueryを追加してclickイベントに応答しました。

その後、ボタンを「送信」から「ボタン」に変更しました。私はこれがより良いHTML/jQueryのプログラマになるためのあなたの方法であなたを役に立てば幸い

$('#submitForm').submit(); 

は最後に、タイムアウト後、フォームがまだ読み込みラインに提出します。

0

jQueryライブラリが含まれている場合は、これを行うより良い方法があります。あなたのケースでは、ページはそれ自身に提出されてリフレッシュされるので、あなたの10秒はリセットされます。

<form class="form" method="post" action="" enctype = "multipart/form-data" > 
    <input type="submit" name="submit" value="OK"> 
</form> 

$(function(){ 
    $("form").bind("submit", function(e){ 
     e.preventDefault(); 
     e.stopPropagation(); 

     var test = "1"; 
     setTimeout(function(){ 
      if(test != '0'){ 
       //return false; 
       alert("false"); 
      }else{ 
       alert("true") 
       //return true; 
      } 
     }, 10000); 
    }); 
}); 
関連する問題