2017-04-28 8 views
0

私は自分のフォームに関数onload="submit()"を使用しようとしていますが、ページが読み込まれるときに複数回実行されます。結果はありますが、どのようにループを止めることができますか?どうすれば一度だけ使うことができますか?ここに私のコード:複数のonloadの送信を避ける

<script type="text/javascript"> 
    function submit() { 
    if (!sessionStorage.getItem("submitted")) { 
     sessionStorage.setItem("submitted", "true"); 
     document.post.submit(); 
    } 
} 
    </script> 

    <body onload="submit()"> 
     <form method="post" id="post" name="post"> 
       //stuff here 
      <input id="submit" type="submit" value="Valider" name="test" class="submit"> 
     </form> 

何か私は間違っているのですか?それとももっと良い方法がありますか?

ありがとうございました!

+0

ループしていますか?送信中にページが再読み込みされていますが、もう一度onload関数を実行していますか? –

+0

はい、最初の読み込みページでそれ自体がループしています。 –

+0

何が起こると思いますか? 'onload'は、ページが読み込まれたときに実行される関数です。これはフォームを送信し、ページをリロードして、再び 'onload'関数を実行します。 – Barmar

答えて

2

sessionStorageを使用すると、すでにフォームを送信しているかどうかを覚えているので、再度フォームを送信しないでください。

function submit() { 
    if (!sessionStorage.getItem("submitted")) { 
     console.log("submitting"); 
     sessionStorage.setItem("submitted", "true"); 
     document.getElementById("post").submit(); 
    } else { 
     console.log("already submitted, not repeating"); 
     sessionStorage.removeItem("submitted"); 
    } 
} 

また、送信ボタン用name="submit"id="submit"を使用しないでください。 "Submit is not a function" error in JavaScript

+0

だから私はちょうど他の機能を置き換える必要がありますか?フォームを送信しません –

+0

送信ボタンの名前を変更します。 – Barmar

+0

私はあなたが私に言ったことを変えました、あなたは私の最初の投稿で見ることができ、それ以上ループはしませんが、私のフォームを提出しません –

関連する問題