在提交时使用javascript禁用表单以防止双重提交

时间:2010-08-31 20:07:14

标签: javascript double-submit-prevention

我想在提交表单后禁用它,以防止双重提交。我会想到相当标准的用例,但我发现的所有例子都存在缺陷。

我能找到的所有内容都是基于禁用提交按钮,但如果用户点击表单上的回车键,这并不会阻止重新提交表单,这是一种非常常见的方法。

我正在考虑修改其中一个现有脚本以解决这个问题,但在重新发明轮子之前,有没有人知道一个已经能够正确处理它的脚本,他们能够共享?我真的很惊讶那里似乎没有任何东西。

3 个答案:

答案 0 :(得分: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(...)等。 )。

答案 1 :(得分:3)

http://jsfiddle.net/c2N4v/

var sent = false;
$('#form').submit(function(e) {
    if (!sent) {
        sent = true;
        // do whatever
    }
    else e.preventDefault();
});

答案 2 :(得分: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>