0

我有一个表单,在提交时它会发布到 div。好的,所以我发现了我收到双重提交的问题,所以我尝试应用我发现的一些 jquery 插件,但它们没用,因为如果你双击速度足够快,我仍然会收到双重提交。从我发现的那些中,我看到了防止它的最好方法是

 if (this.beenSubmitted) return false;
 else
 this.beenSubmitted = true;

但是后来,我注意到如果需要再次发送表单,用户必须刷新页面才能发送它。就我而言,我希望他们能够在发送后再次发送,(我并不自相矛盾,因为它会是不同的内容)。为了更好地解释它,这个表格发布了想法。如果您想发布 2 个不同的想法,您必须刷新页面才能发布。如果您单击得足够快,防止重复提交将有助于两次提交相同的想法。所以,我所做的是我添加了这个“5000”:

 if (this.beenSubmitted) return false, 5000;
 else
 this.beenSubmitted = true;

所以,现在它刷新了我的页面。但是我有点挑剔,哈哈。所以我觉得整个页面必须刷新很烦人。如果您输入然后刷新怎么办。我总是可以降低我知道的 5000,但如果你开始浏览网站或放大,我仍然觉得它很烦人,你最终会刷新。

所以,我的问题是,有没有办法刷新表格?还是一种更好的方法来防止实际上适用于这种情况的双重提交(您可以在几秒钟后提交)?

这是脚本:

<script type="text/javascript">
$(document).ready(function(){
$("form#myform").submit(function() {
        var addcontent = jQuery('#addcontent').attr('value');

        if ( addcontent.replace(/\s/g,"") == "" ) return false;
        if (this.beenSubmitted) return false,5000;
            else
            this.beenSubmitted = true;

$.ajax({
type: "POST",
url: "post.php",
data:"addcontent="+ addcontent,
success: function(){blah blah blah, ton sof code here including pagintion here, insert into a div here also, if u need this let me know.
});
</script>

大部分都是我在这里问questinos的。我的 Jquery 和 Ajax 知识不是最好的。

谢谢你的帮助=}

4

3 回答 3

1

速率限制以防止 ExpressJS 中的恶意行为

上面的链接有一些关于在提交按钮上放置一个计时器的内容,这样你就不能在 3 秒内再次点击它。

<script>
var submitTimer = new Collate(3000);
</script>
<form action="post" onsubmit="return submitTimer.idle();">
于 2012-09-19T03:19:44.667 回答
0

你为什么不使用 this.beenSubmitted = true 方法并将它与超时结合起来?例如,在 5000 毫秒后,您执行超时并将 this.beenSubmitted 设置为 false。

于 2012-09-19T02:38:31.617 回答
0

该声明:

  return false, 5000;

将永远返回5000,使用false是多余且毫无意义的。

要在不重新加载页面的情况下重置表单(在某些浏览器中不一定会重置表单),请使用重置按钮或调用表单的重置方法。如果表单被重置,您可以使用onreset侦听器来更新beenSubmitted属性。

自发明表单以来,表单的多次提交一直是一个问题,通常在服务器上处理(如果收到两个相同的请求,则忽略第二个)。

在客户端使用脚本是不可靠的,因为您不知道服务器在做什么,并且您必须猜测是否需要重新提交表单。

于 2012-09-19T03:25:37.113 回答