javascript - Jquery表单提交: infinite loop

标签 javascript jquery forms

大家好,美好的一天。

我有一个问题,并且我已经有了可行的答案。我正在寻找答案的解释。

我有一个带有表单的普通 html 页面,表单的提交按钮在其 onclick 事件上有功能 例如

<button type="submit" class="btn btn-danger" onclick="envoke()">Login</button>

在我的 javascript 文件中,我有以下代码

function envoke ()
{
  $('form:first').submit((e) => {
      e.preventDefault();
      loginAnimation();
  })
}

function loginAnimation()
{
  let w = window.innerWidth;
  $('#DIVbody').css({"position" : "relative"}).animate({left : "-=" + w + "px"}),2000,function () {
       $('form').first().submit();
  }
}

但是,由于 envoke() 函数不断被调用,因此该代码会导致无限循环,进而调用 loginAnimation() 函数。

代码的想法是阻止表单的正常提交,然后执行需要2秒才能完成的动画,动画完成后应该提交表单。

我通过更改 loginAnimation() 函数中的代码找到了解决方案: $('form').first().submit(); 更改为 $('form').off().first().submit(); 而且它有效!!

但是我不知道为什么,我一生都无法弄清楚。 任何人都可以提供一个简单的解释或 Material ,我可以去研究以获得更好的想法。

PS。另外,这是我正在开发的一个旧项目,我记得 envoke() 和 loginAnimation() 函数过去工作得很好,现在(大约 2 个月后)它不起作用,我必须添加一点额外的 Jquery为了让它发挥作用,我的好奇心让我不知道为什么。

最佳答案

简单,evoke() 正在调用 loginAnimate(),而 loginAnimate() 又在调用 evoke()

evoke() 中,您实际上绑定(bind)了 loginAnimate(),它将再次调用绑定(bind)器。 [无限循环]

enter image description here

function envoke ()
{
  $('form:first').submit((e) => {
      e.preventDefault();
      loginAnimation();
  })
}

function loginAnimation()
{
  let w = window.innerWidth;
  $('#DIVbody').css({"position" : "relative"}).animate({left : "-=" + w + "px"}),2000,function () {
       // $('form').first().submit();
  }
}

关于javascript - Jquery表单提交: infinite loop,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58992427/

相关文章:

javascript - 移动太慢时 jquery mouseleave 问题

javascript - 从 iphone 获取图像,使用 phonegap camera api

php - 在提交表单时,将不同的字段插入到不同的 MYSQL 表中

android - ionic 2 : Disable "Ok" button on keyboard in a form

javascript - 相对于另一个 "<li>"增加 "<li>"的高度

javascript - 如何判断一个 JavaScript 变量是否是对另一个变量的引用

javascript - 如何让需要的文字逐字出现

jquery - 在 :fixed tablets only 位置发出

jquery - iOS - 单击不触发具有 CSS 3D 转换的元素

forms - 以 Symfony2 类形式翻译选择选项