防止双重表单提交文本区域的最佳方法

时间:2011-11-15 23:23:53

标签: mysql forms

我有一个带有文本区域的表单。有些人双击提交按钮,即使我在提交后提出“请稍候”的消息,有些人仍然设法进行双重提交。

文本区域的问题是我不能在数据库中使该列唯一,所以我的问题是 - 如何确保这些表单不会被提交到数据库两次。

即使他们有时进入数据库,我该如何阻止他们显示?也许阶梯是更好的选择?

谢谢!

4 个答案:

答案 0 :(得分:3)

使用包含唯一标识符的隐藏字段。

  

即使他们有时进入数据库

如果您将唯一标识符存储在数据库中并添加" UNIQUE INDEX"到那一列,他们首先不会进入数据库。

答案 1 :(得分:2)

首次点击后禁用提交按钮。

例如,如果你使用的是jQuery,你可以这样:

$('input[type=submit]').click(function() {
  $(this).attr('disabled', true);
});

答案 2 :(得分:2)

对于使用jQuery的UI解决方案,请使用类似

的内容
$("#foo").one("click", function() {
  console.log("This will be displayed only once.");
});

请参阅.one()

这样可以尽快解决双重提交问题。如果您依赖后端的唯一提交,请将唯一标识符作为隐藏字段。

答案 3 :(得分:1)

您可以使用一些JavaScript ......

var submitted = false;
document.querySelector('form').addEventListener('submit', function(event) {
    if (submitted) {
        event.preventDefault();
    }
    submitted = true;
    this.querySelector('input[type="submit"]').disabled = true;

}, false);

jsFiddle

(当然,请检查这些方法的兼容性。)

如果您碰巧使用jQuery ......

var submitted = false;
$('form').submit(function(event) {
    if (submitted) {
        event.preventDefault();
    }

    submitted = true;
    $(this).find(':submit').prop('disabled', true);

});

jsFiddle