gpt4 book ai didi

javascript - Jquery表单提交: infinite loop

转载 作者:行者123 更新时间:2023-12-01 00:26:00 24 4
gpt4 key购买 nike

大家好,美好的一天。

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

我有一个带有表单的普通 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com