2016-06-29 8 views
0

私はフォームを持っています。ユーザーがjavascriptを使ってダブル提出するのをやめようとしています。何らかの理由で、ハンドラ関数がfalseを返し、event.preventDefaultが呼び出されたとしても、フォームは複数回送信されます。誰でも知っている理由は?また、私はこの仕事を意図どおりにするにはどうしたらいいですか?Javascript - Form停止しないで送信する

document.getElementById('my_form').addEventListener("submit", function(evt){ 
    if (validationFunction(document.getElementById('submit_button')) == false) { 
     evt.preventDefault(); 
     return false; 
    } 
}); 

機能 validationFunction(){ リターン偽}

<form method="post" id="my_form"> 
    <input name='textbox'> 
    <input type="submit" id="submit_button"> 
</form> 
+0

ような?フォームがすでに提出されているかどうかチェックしていますか?全体を投稿する必要はありません。ちょうどそれが[mcve]になるように十分です。 –

+0

検証関数が真または偽を返す – catbadger

+0

はい、上のコードから明らかです;)。問題を再現するにはまだ十分ではありません。あなたの例を完成させるのに十分なコードを投稿することができますか?完了**(私の前のコメントのリンクを参照)? –

答えて

1

は、簡単な方法でそれを試してみてください。 validationFunction` `で何が起こっているこの

HTML

<form id="my_form"> 
<input name='textbox'> 
<input type="button" id="submit_btn"> 
</form> 

JS

document.getElementById("submit_btn").addEventListener("click", function(){ 

document.getElementById("my_form").submit(); // if validation is true run this 
}); 
+0

addEventListenerを使用する必要があります – catbadger

+0

編集を試してください。次に、検証関数を追加します。 –

+0

これで提出を停止することはありません。 DX – catbadger

1
document.getElementById('my_form').addEventListener("submit", function(evt){ 
    if (validationFunction(document.getElementById('submit_button')) == false) { 

     // anything here 

     evt.preventDefault(); 
     return false; 
    } 

    // anything here 

    event.preventDefault(); 
}); 
+0

これは常にイベントを強制終了しませんか? – catbadger

+0

「イベントを殺す」とはどういう意味ですか? – Kairat

+0

これは決して適切に実行されません。あなたがデフォルトを妨げているからです。私が理解していることは、あなたが偽に戻るときにこれをしたいということです。 – catbadger

関連する問題