2010-08-31 141 views
1

我想在提交表单后禁用表单以防止双重提交。非常标准的用例我会想,但我可以发现的所有例子都有缺陷。使用javascript禁用表单以防止双重提交

我能找到的所有东西都是基于禁用提交按钮,但是这并不妨碍表单被重新提交,如果用户在表单上敲入了回车键,这是一种非常常见的方法。

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

+0

是否有可能打表单上的回车键提交表单一旦所有形式元素被禁用?即如果表单没有提交元素,可以通过按回车来提交?我不认为你可以这样做。 – Adam 2010-08-31 20:18:02

+0

@Adam我想我可以禁用所有字段,但到目前为止,我一直只禁用提交。这不是一个错误的想法,我可以走一切禁用的路线。 – 2010-08-31 20:22:09

+0

可能重复的[防止jQuery中的双重提交表单](http://stackoverflow.com/questions/2830542/prevent-double-submission-of-forms-in-jquery) – CmajSmith 2014-11-05 00:43:04

回答

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(...)等)。

+0

我在解决方案时遇到了一些麻烦。从概念上讲它很明显,但是当我实施它时,实际上我似乎可以潜入一个额外的点击,如果我尽可能快地反复按下提交按钮。就好像第二次提交是在第一次有时间将提交设置为true之前启动的。但是,当我坚持提醒时,一切似乎都按我的预期工作。 – 2010-09-01 02:19:00

+0

奇怪的是,双提交脚本完全对输入键。它只使用鼠标点击提交按钮,双柱仍然滑过。 – 2010-09-01 02:54:01

+0

嗯,最后一块信息,这个重复的提交鼠标问题不会发生在最新的Chrome或IE,只有最新的Firefox。也许我已经准备好接受这个作为一个模糊的Firefox错误并将其写下来。 – 2010-09-01 02:57:35

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>