【问题标题】:Infinite loop of form submit using jquery event使用jquery事件提交表单的无限循环
【发布时间】:2012-03-21 21:06:57
【问题描述】:

当我尝试捕获表单提交时,代码卡在了一个循环中。目的是在表单消失之前替换它的值。

$('form').submit(function(e){
   e.preventDefault();
   $.ajax({
      type: "POST",
      url: 'convert.asp',
      data: $('form').serialize(),
      success: function(response){
         $('input[name="field1"]').val(response);
         $('form').submit();
      }
   });
   return false;
});

有人有什么想法吗?

更新:我最初将它绑定到按钮单击事件并且它正在工作,但我想保留提交按钮的 [enter] 键元素。看到代码有点不合逻辑,抓住按键会更好吗?

【问题讨论】:

  • 那么...您通过 AJAX 发布表单,然后再次.submit() 吗?为什么要提交两次?只需删除第二个$('form').submit()
  • @mblase75 e.preventDefault();
  • @mblase75 就在这里,不需要内部提交。您已将表单的提交事件绑定到其中的函数,因此第二次调用再次调用第一次,依此类推。
  • @Christoph 怎么样?这不会停止处理程序。
  • 您要在提交之前还是之后更改表单值?因为您的代码通过 ajax 提交它,然后在成功回调中更改输入值。 之前这里你没有改变任何东西。

标签: jquery form-submit


【解决方案1】:

我认为您的 ajax 是在最终提交之前尝试验证表单。在这种情况下,只需在提交表单之前取消绑定验证功能即可。

  success: function(response){
     $('input[name="field1"]').val(response);
     // Add unbind to remove validations
     $('form').unbind().submit(); 
  }

【讨论】:

  • 完美!非常聪明:D你做了一个解绑,因为它在提交时调用了它......所以如果你解绑它,它将不会再次被调用:D
  • 从 jQuery 1.7 开始,and .off() 方法优于 .unbind()
  • @firstTimeCaller 能否提供一个带有 off() 的代码示例?
  • @bart $('form').off().submit();
【解决方案2】:

在成功触发另一个提交...

$('form').submit(function(e){
   e.preventDefault(); // redundant,  you return false in the end. <<<===
   $.ajax({
      type: "POST",
      url: 'convert.asp',
      data: $('form').serialize(),
      success: function(response){
         $('input[name="field1"]').val(response);
         $('form').submit(); // <=== delete this! <<<<=================
      }
   });
   return false;
});

【讨论】:

    【解决方案3】:

    你提交你的表单,阻止提交只是为了提交表单,它被阻止提交...... :-D

    【讨论】:

    • 优秀的评论,但不是答案... :-D
    • 我也喜欢!我会赞成它,但前提是它是评论。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-10-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-10
    • 1970-01-01
    相关资源
    最近更新 更多