如何防止使用jQuery或Javascript进行双重提交?

Ody*_*3us 15 html javascript forms jquery

我不断在我的数据库中获得重复条目,因为用户不耐烦地多次单击提交按钮.

我用Google搜索并搜索了一些脚本,但似乎没有一个足够.

如何使用javascript或jQuery来防止这些重复条目的发生?

Thanx提前!

Bil*_*zke 21

如何在提交时禁用按钮?我就是做这个的.它工作正常.

$('form').submit(function(){
    $('input[type=submit]', this).attr('disabled', 'disabled');
});
Run Code Online (Sandbox Code Playgroud)

免责声明:
这仅适用于在用户浏览器上启用javascript的情况.如果提交的数据非常重要(如信用卡购买),那么请将我的解决方案视为第一道防线.但是,对于许多用例,禁用提交按钮将提供足够的预防.

我会首先实现这个仅限javascript的解决方案.然后跟踪仍在创建的重复记录数.如果它为零(或者足够低而不在乎),那么你已经完成了.如果它对您来说太高,则对现有记录执行后端数据库检查.

  • Javascript只是解决方案的一部分,您应该检查数据库以检查是否刚刚输入了数据.如果您有一个独特的数据,您可以检查这是最好的方法,但另一种方法是在数据上设置时间戳并检查该用户是否在短时间内添加了任何内容.但是,这取决于您正在添加的应用程序. (2认同)
  • 如果形式价值很重要,那么这是一个糟糕的解决方案。仅发送未禁用的字段。禁用字段(按钮)将不会随表单一起发送。在这种情况下,请使用此变体 ` var isFormSubscribed = false; form.submit(function(){ if(isFormSubscribed){ return false; } //如果表单有效则禁用提交的表单以防止重复提交 isFormSubscribed = true; }); ` (2认同)

Sar*_*raz 9

这应该做的伎俩:

$("form").submit(function() {
   $(":submit", this).attr("disabled", "disabled");
});
Run Code Online (Sandbox Code Playgroud)

没有JQuery?

或者,您可以从db检查以检查记录是否已存在,如果已存在,请不要插入新记录.


Fly*_*179 7

我见过的一种技术是为每个打开的表单分配一个唯一的ID,并且每个表单只接受一个基于ID的提交.

这也意味着你可以检查人们根本没有提交的次数,你可以通过检查你的服务器创建的ID来检查提交是否真的来自你的表单.

我知道你要求一个javascript解决方案,但是如果我需要健壮性,我个人会这样做.


Nik*_*ski 5

防止双重发布并不像禁用提交按钮那么简单.还有其他元素可以提交它:

  • 按钮元素
  • img元素
  • JavaScript的
  • 在某些文本字段上按"输入"

使用jQuery数据容器将是我的选择.这是一个例子:

$('#someForm').submit(function(){
    $this = $(this);

    /** prevent double posting */
    if ($this.data().isSubmitted) {
        return false;
    }

    /** do some processing */

    /** mark the form as processed, so we will not process it again */
    $this.data().isSubmitted = true;

    return true;
});
Run Code Online (Sandbox Code Playgroud)