Py学习  »  Jquery

Jquery表单提交:无限循环

moonninja • 4 年前 • 457 次点击  

大家好,大家好。

我有一个问题,我已经有了一个有效的答案。我在找答案的解释。

我有一个带有表单的普通html页面,表单的submit按钮在其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()函数会不断被调用,而loginImation()函数会依次被调用。

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

我通过修改loginImation()函数中的代码找到了一个修复方法: $('form').first().submit(); 更改为 $('form').off().first().submit(); 而且有效!!

但是我不知道为什么,为了我的生命,我无法弄清楚。 有谁能给我一个简单的解释或材料,我可以去研究,以便得到一个更好的主意。

另外,这是我正在做的一个老项目,我记得envoke()和loginAnimation()函数曾经工作得很好,现在(大约2个月后)它不工作了,我必须添加一点额外的Jquery才能使它工作,好奇心正在扼杀我为什么这样做。

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/52506
 
457 次点击  
文章 [ 2 ]  |  最新文章 4 年前
Pavan kumar
Reply   •   1 楼
Pavan kumar    4 年前

以下是对 .off() 你在代码中使用的

不带参数的Calling.off()将删除所有附加到元素的处理程序。通过提供事件名称、命名空间、选择器或处理程序函数名称的组合,可以删除元素上的特定事件处理程序。当给定多个筛选参数时,所提供的所有参数都必须与要删除的事件处理程序匹配。

注:以上内容摘自JQuery API文档

for循环之所以是无限的,是因为您正在以编程方式调用Submit on form,这将再次触发envoke()

$('form').first().submit(); // where you are triggering submit action again
Azevedo
Reply   •   2 楼
Azevedo    4 年前

很简单, evoke() 正在呼叫 loginAnimate() 正在呼叫 唤起() 再一次。

唤起() 你真的很有约束力 loginAnimate() 又叫活页夹。[无限循环]

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();
  }
}