ダブル提出を防止するために提出するにはJavaScriptでフォームを無効にします

StackOverflow https://stackoverflow.com/questions/3612790

質問

それは、二重投稿を防ぐために提出された後、

私は、フォームを無効にしたいと思います。かなり標準的な使用の場合は、私が思うだろうが、例のすべては、私がそこに欠陥がある見つけることができます。

私は見つけることができます。

すべてが送信ボタンを無効に基づいていますが、ユーザーはかなり一般的なアプローチであるフォーム、上のキーを入力してヒットした場合、これは再提出されてからフォームを防ぐことはできません。

私はこれを考慮するためにそこから既存のスクリプトの1つを変更を考えているが、私は車輪の再発明する前に、すでに共有に、彼らがしていることができていることこれを適切に処理するスクリプトの誰も知っていますか?私は実際にまだそこに何かがあるようには思えない驚いています。

役に立ちましたか?

解決

あなたはブール変数(またはブールメンバ変数を持つオブジェクト)を作成し、唯一の変数がfalseの場合、フォームを提出することができます。ような何かます:

function init() {
    var submit = false;
    var f = document.getElementById("FormID");
    f.onsubmit = function() {
        if(submit) {
            return false;
        } else {
            submit = true;
            return true;
        }
    }
}

もちろん、あなたがそれを行うために(initwindow.onload = ...window.addEventListener(...)、など。)。

を選ぶ方の風味で、ページの読み込み、以下のwindow.attachEvent(...)を呼び出す必要があります

他のヒント

http://jsfiddle.net/c2N4v/する

var sent = false;
$('#form').submit(function(e) {
    if (!sent) {
        sent = true;
        // do whatever
    }
    else e.preventDefault();
});
私は、ソリューションの多くを試してみたが、それらのどれも私のために働いていません。私はこの1つを使用し、それが本当に正常に動作してます:

jQueryの

<script>
$(document).ready(function(){
  $('#buttonSubmit').click(function() {
    if ($('#frm-confirm').attr('submitted')){
        event.preventDefault();
    } else {
        $('#frm-confirm').attr('submitted',true);
    }
  });
});
</script>

HTML / PHP

<form id="frm-confirm" action="" method="post">
    <input id="amount" name="amount" value="<?php echo round($_POST['amount'],2); ?>" type="hidden" />
    <input id="order_id" name="order_id" value="<?php echo htmlspecialchars($_POST['order_id']);?>" type="hidden" />
    <input type="submit" id="buttonSubmit" name="confirm" value="Confirm" />
</form>
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top