0

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

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


  })

我应该使用不同的 html 标签或 jquery 函数吗?

4

2 回答 2

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

于 2013-05-02T15:36:12.883 回答
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 键重新提交它。

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

于 2013-05-02T15:38:32.403 回答