【问题标题】:Solution to accidental multiple enteries of form表单意外多次输入的解决方法
【发布时间】:2014-02-14 10:13:08
【问题描述】:

我有 jquery/ajax:

$('form').bind('submit', function () {
     $.ajax({
         type: 'post',
         url: "Write-to.php",
         data: $("form").serialize(),
         success: function () {
             $.get("Data.php", function (data1) {
                 console.log(data1);
                 $(".data").html(data1);
                 scrolltobottom();
                 setFocusToTextBox();
                 $("#usermsg").val("");
             });
             $('.submited').show();
             $('.submited').html("S E N T");
             $("#usermsg").val("");

             setTimeout(function () {
                 $('.submited').fadeOut(1000);
             }, 2000);
         }
     });

     return false;
 });

但是,当我点击输入时,我仍然需要在$("#usermsg").val(""); 之前等待一段时间,这会导致意外的双重输入,因为用户认为他们实际上没有发送表单。

我已经在php中设置了一个不允许任何空表单的函数。

如何防止多次输入?

【问题讨论】:

  • 您可以在点击时修改 UI 以指示表单已提交。然后您可以在错误时恢复,或在成功时继续。一个示例可能是:单击时,禁用提交按钮。出错时,重新启用按钮。成功后,做你的默认行为。

标签: php jquery ajax forms


【解决方案1】:

您可以在提交表单后取消绑定on submit,并仅使用return false;绑定另一个函数,以防止再次提交表单。

var submitting = 0;
$('form').bind('submit', function () {
     if(!submitting)
     {
         submitting = 1;
         $.ajax({
             type: 'post',
             url: "Write-to.php",
             data: $("form").serialize(),
             success: function () {
                submitting = 0;
                $.get("Data.php", function (data1) {
                     console.log(data1);
                     $(".data").html(data1);
                     scrolltobottom();
                     setFocusToTextBox();
                     $("#usermsg").val("");
                });
                $('.submited').show();
                $('.submited').html("S E N T");
                $("#usermsg").val("");

                setTimeout(function () {
                   $('.submited').fadeOut(1000);
                }, 2000);
            }
        });
     }
     return false;
 });

【讨论】:

  • 这只是阻止我提交两次。句号!!
  • 如果此解决方案有效并回答您的问题,请接受/支持。
  • 这不是我拿走它的原因!
  • 我不明白。您想阻止第二次提交,但因为它阻止您提交两次而将其拿走?它只是满足您的要求。
  • 哦,对不起!完全是我的错,我的意思是在“成功”之前阻止
最近更新 更多