2011-10-25 13 views
1

私は、送信ボタンを使用してリモートマイクロプロセッサにコマンドを送信するウェブサイトを持っています。ユーザーが送信ボタンを短時間で何度もクリックすると、リモートのマイクロプロセッサーとソフトウェアがクラッシュします。私はそれぞれの「提出」ボタン・プレスの間に1秒の遅れを加えて、クラッシュしないようにすることができると思った。ここに私が提出ボタンのために持っているものがあります。フォームの提出を延期するにはどうすればよいですか?

私は形でonSubmit="setTimeout (1000)"ようなものを使用することができると思ったが、それが動作していないようです。私は間違って何をしていますか?

例:

<form name="test" action="http://mydomain.dyndns.org/?8" target="results" method="POST" onSubmit="setTimeout (1000)"> 
    <input type="submit" value=" ← Move Left " /> 
</form> 
+1

私はこれを行うための最良の場所はバックエンドにあると思います。 JavaScriptのみを使用している場合は、簡単に無効にすることができますが、DoS攻撃を未然に防ぐことができます。 – solartic

+0

+1。模範的な質問! –

+0

タイトルが正しくありません。あなたは提出イベントを遅らせておらず、あなたはそれを防止しています。 –

答えて

2

バックエンドのソリューションが好ましいが、あなたにも(または代わりに)それをクライアント側をしたい場合:

あなたonsubmit戻りfalseの場合には、提出を停止します。

私がすることによってこれを解決するために傾いているはずだ:一時的に、ユーザーはすぐに再び提出することができないように、第2のボタンを無効化、および/または

  • ない限り提出するその後の試みを無視

    1. 少なくとも1秒は経過しています。

    私は、ユーザーがボタンをたくさん回のをクリックする可能性があるため、すべての応募作品と空間それらアウトをキューしようと気にしないでしょう。

    したがって、次の例では、2番目のの中で実行された余分な送信が無視され、送信ボタンは無効になります。両方の理由は何ですか?フォームにフィールドがある場合、ユーザーはEnterキーを押して送信できます。

    <form name="test" action="http://mydomain.dyndns.org/?8" target="results" 
         method="POST" onSubmit="return testSubmit();"> 
        <input id="submitButton" type="submit" value=" ← Move Left " /> 
    </form> 
    
    <script> 
        var allowSubmit = true; 
    
        function testSubmit() { 
         if (!allowSubmit) 
         return false; 
    
         allowSubmit = false; 
         document.getElementById("submitButton").disabled = true; 
    
         setTimeout(function() { 
            allowSubmit = true; 
            document.getElementById("submitButton").disabled = false; 
           }, 1000); 
    
         return true; 
        } 
    </script> 
    

    (注)このコード:onSubmit="return testSubmit();" - あなたがそこにある「戻る」または捨てられ、提出が防止されることはありませんtestSubmit()から戻ってきた値を必要としています。

  • 3

    あなたが実際に要求をキューし、マイクロプロセッサが安全に受け入れることができますどのような割合で、マイクロプロセッサに送信するコードを記述する必要があります。クライアント側ではなくサーバー側でこれを行う必要があります。

    関連する問題