首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >防止在jQuery中重复提交表单

防止在jQuery中重复提交表单
EN

Stack Overflow用户
提问于 2010-05-14 05:45:03
回答 18查看 211.9K关注 0票数 179

我有一个表单,服务器需要一段时间才能处理。我需要确保用户等待,并且不会通过再次单击按钮来尝试重新提交表单。我尝试使用以下jQuery代码:

代码语言:javascript
复制
<script type="text/javascript">
$(document).ready(function() {
    $("form#my_form").submit(function() {
        $('input').attr('disabled', 'disabled');
        $('a').attr('disabled', 'disabled');
        return true;
    });
});
</script>

当我在Firefox中尝试这样做时,所有的东西都被禁用了,但是表单并没有提交任何它应该包含的POST数据。我不能使用jQuery来提交表单,因为我需要将该按钮与表单一起提交,因为有多个提交按钮,并且我要确定在帖子中包含哪个值所使用的按钮。我需要提交的表格,因为它通常是,我需要禁用一切后,这发生了。

谢谢!

EN

回答 18

Stack Overflow用户

发布于 2012-07-25 20:12:08

计时方法是错误的-你如何知道操作将在客户端的浏览器上花费多长时间?

怎么做?

代码语言:javascript
复制
$('form').submit(function(){
  $(this).find(':submit').attr('disabled','disabled');
});

当表单提交时,它将禁用内部的所有提交按钮。

请记住,在Firefox中,当您禁用按钮时,当您返回历史时,此状态将被记住。例如,为了防止出现这种情况,你必须在页面加载时启用按钮。

票数 48
EN

Stack Overflow用户

发布于 2015-01-20 07:18:02

请查看jquery-safeform插件。

使用示例:

代码语言:javascript
复制
$('.safeform').safeform({
    timeout: 5000,  // disable next submission for 5 sec
    submit: function() {
        // You can put validation and ajax stuff here...

        // When done no need to wait for timeout, re-enable the form ASAP
        $(this).safeform('complete');
        return false;
    }
});
票数 8
EN

Stack Overflow用户

发布于 2011-10-30 15:45:47

有可能改进Nathan Long的approach。您可以将检测已提交表单的逻辑替换为以下逻辑:

代码语言:javascript
复制
var lastTime = $(this).data("lastSubmitTime");
if (lastTime && typeof lastTime === "object") {
    var now = new Date();
    if ((now - lastTime) > 2000) // 2000ms
        return true;
    else
        return false;
}
$(this).data("lastSubmitTime", new Date());
return true; // or do an ajax call or smth else
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2830542

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档