1

二重提出を防ぐために、提出後にフォームを無効にしたいのですが。かなり標準的なユースケースだと思いますが、そこにあるすべての例に欠陥があります。

私が見つけることができるものはすべて、送信ボタンを無効にすることに基づいていますが、これは、ユーザーがフォームのEnterキーを押した場合に、フォームが再送信されるのを妨げるものではありません。これは、かなり一般的なアプローチです。

これを説明するために既存のスクリプトの1つを変更することを考えていますが、車輪の再発明を行う前に、これを適切に処理して共有できるスクリプトを知っている人はいますか?まだ何も出ていないようで、本当にびっくりしました。

4

3 に答える 3

4

ブール変数(またはブールメンバー変数を持つオブジェクト)を作成し、変数がfalseの場合にのみフォームを送信できます。何かのようなもの:

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

もちろん、initページの読み込みに続いて、どのフレーバーを選択しても(、、、window.onload = ...などwindow.addEventListener(...))呼び出す必要がありますwindow.attachEvent(...)

于 2010-08-31T20:15:53.547 に答える
3

http://jsfiddle.net/c2N4v/

var sent = false;
$('#form').submit(function(e) {
    if (!sent) {
        sent = true;
        // do whatever
    }
    else e.preventDefault();
});
于 2010-08-31T20:18:26.917 に答える
0

私は多くの解決策を試しましたが、どれも私にはうまくいきませんでした。私はこれを使用しました、そしてそれは本当にうまく働いています:

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>
于 2014-11-05T00:39:34.403 に答える