社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  Jquery

Jquery表单提交:无限循环

moonninja • 5 年前 • 603 次点击  

大家好,大家好。

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

我有一个带有表单的普通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
 
603 次点击  
文章 [ 2 ]  |  最新文章 5 年前
Pavan kumar
Reply   •   1 楼
Pavan kumar    5 年前

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

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

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

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

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

很简单, 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();
  }
}