【问题标题】:Prevent double form submission in jQuery防止 jQuery 中的双重表单提交
【发布时间】:2011-02-17 01:32:57
【问题描述】:

我有一个表单,用户可以使用它来输入有关帖子的信息。完成后,他们单击“保存”进行更新。但是,在极少数情况下(15,000 条记录中有 10 条),用户双击了保存按钮并导致重复提交表单以重复发布项目。

我尝试使用它来防止它:

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

但是这个问题,它在 Safari / Firefox 等中完美运行,但在 Internet Explorer 8 中不起作用(可能不适用于 6 和 7)

当我在 IE8 中按保存时,按钮被禁用,仅此而已,根本没有提交表单。

(我在有和没有返回 true 的情况下都试过了;)

【问题讨论】:

  • 你有没有想过从点击事件变成提交事件?

标签: jquery forms internet-explorer-8


【解决方案1】:

我不确定,所以这是一个完整的猜测,但这可能取决于您的选择器。试试吧:

$('input:submit').click(function() {
    $(this).attr('disabled', true);
});#

您也可以尝试拦截submit event 本身:

$('form').bind('submit', function(e) {
     $(this).find('input:submit').attr('disabled', 'disabled');
});

【讨论】:

  • 它做同样的事情,灰色的提交按钮,并没有在 IE8 中提交表单。
  • jAndy 更新了它来处理提交事件(jQuery 不将其称为 onsubmit 吗?看起来很奇怪)。处理表单上的 onsubmit 将做你想做的事。
【解决方案2】:

你需要处理表单的onsubmit事件,而不是提交按钮的click事件。

【讨论】:

    【解决方案3】:

    用户也可以按回车键提交表单,所以不要绑定按钮点击事件,而是使用表单提交。也不是禁用,而是通过将提交按钮替换为一些加载图像来隐藏提交按钮。

    jQuery("form").submit(function () {
            jQuery(":submit", this).css("display", "none");
            jQuery(":submit", this).after("<span><img src='loading.gif' /></span>");
    });
    

    【讨论】:

    • 我喜欢这种想法,但如果提交时验证失败,我可能需要该按钮。
    【解决方案4】:

    Chirs,这是每个 Web 开发人员都面临的一个非常普遍的问题。猜猜看,它有一个非常受欢迎的解决方案。

    解决方案称为 PRG(发布 -> 重定向 -> 获取)。在http://en.wikipedia.org/wiki/Post/Redirect/Get上阅读更多相关信息

    基本上,您需要让页面处于 HTTP GET 模式,这样即使用户刷新页面,也不会重新提交任何数据。因此,您提交表单,通过执行 GET 请求将页面重定向到显示最近提交的数据的 URL。

    编辑 根据下面的评论,克里斯似乎已经在遵循上述范式。伟大的。但他仍然看到重复的表单提交。我建议在第一次提交时,用加载图像替换按钮(作为第一件事),这样用户就看不到任何要重新单击的按钮:)

    $(document).ready(function() {
       // function which handles form submission
       $(#submitButton).replaceWith("<img src="./images/myLoader.gif>");
       // do the actual form submission after this
       ...
    });
    

    【讨论】:

    • 它实际上是在 Post Redirect Get 模式下完成的,问题是如果您单击保存按钮两次,浏览器将发送两次帖子,然后当第一个完成并到达重定向点时,然后它重定向,但第二个已经开始运行并且可能重复行
    • 文章说这种模式不能解决用户多次点击提交按钮导致的重复提交。
    • 嘿,这并不能真正回答这个问题,但它确实帮助我解决了一个不相关的问题。谢谢!
    猜你喜欢
    • 2012-04-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多