如何防止表单提交连续发布?

时间:2013-05-02 15:21:09

标签: jquery html

我有一个文本字段,用户在其中输入消息,单击Enter并将其提交到数据库中。问题是,它总是提交多次,取决于按下回车键多少毫秒。我实际上并没有进行任何现场验证,它更像是学习时的概念验证。此外,我知道我可以在一次提交后完全禁用提交表单,但我希望能够继续输入消息。

<input type="text" placeholder="Enter message" id="enterMsg">
$(document).ready(function() {
  $("#enterMsg").submit(function(){
    var uid = $("#enterMsg").val();
    Messages.insert({text: uid});


  })

我应该使用不同的html标签还是jquery函数?

2 个答案:

答案 0 :(得分:1)

嗯,我认为你不能在文本字段中使用.submit()。我会用表格来做这件事。

HTML:

<form id="myform">
   <input type="text" placeholder="Enter message" id="enterMsg" />
</form>

JS:

$(document).ready(function() {
  var submitted = false;
  $("#myform").submit(function(e){
    e.preventDefault();
    if(!submitted) {
       var uid = $("#enterMsg").val();
       Messages.insert({text: uid}); 
       submitted = true; /* You can clear the input or hide the form, or something */
    }

  });
});

JSFIDDLE

答案 1 :(得分:0)

既然你承认这只是一种纯粹的流行病,因为没有一个心智正常的人会部署这种不安全的东西......

您可以拥有一个全局变量来确定是应该接受还是拒绝提交。在提交提交之前,请检查全局变量。如果设置为TRUE,则接受提交并立即将全局变量设置为FALSE。创建超时,例如1秒,将全局变量重置为TRUE。

这只允许给定用户每秒提交一次。

<form id="myform">
<input type="text" placeholder="Enter message" id="enterMsg">
<input type="submit" />
</form>
var accept_flag = true;
time_between_submissions = 1000;
$(document).ready(function() {
  $("#myform").submit(function(){
     if (accept_flag) {
         var uid = $("#enterMsg").val();
         Messages.insert({text: uid});
         accept_flag = false;
         setTimeout(function() { accept_flag = true; },time_between_submissions);
     }


});

当然,这一切都不重要,因为如果您正在提交正确的POST表单,一旦提交表单,浏览器就不会通过按住ENTER键重新提交它。 / p>

如果您通过AJAX执行此操作,则不会使用.submit()方法,您将在窗体上侦听keyPress事件,然后是,您需要实现一种方法来限制提交。