Jquery在提交处理程序中运行提交时的最大调用栈



所以,我在使用jquery提交表单时出现了错误"in"提交处理程序这样的

$('form#form').submit(function(e){
e.preventDefault();
$(this).submit();
});

But i got error

Uncaught RangeError: Maximum call stack size exceeded

它说它停止在$(this).submit()

这是我的完整代码

$('form#form').submit(function(e) {
e.preventDefault();
let gambarTersisa = [];
let gambarNodes = document.querySelectorAll('span[contenteditable] img, figure[contenteditable] img');
for (let index = 0; index < gambarNodes.length; index++) {
gambarTersisa[index] = gambarNodes[index].src;
}
$(this).append($("<input>")
.attr('type', 'hidden')
.attr('name', 'gambar')
.attr("value", gambarTersisa)
);
$(this).submit();
});

结果表明,当调用$(this).submit()时,jQuery调用提交使用jQuery添加的事件处理程序。此无限递归被检测并报告为耗尽堆栈空间。

这与普通JavaScript不同,在提交处理程序中调用form.submit不会再次调用该处理程序。

一个解决方案是不无条件地调用$(this).submit()-必须有一种方法让提交发生(不调用e.preventDefault之后)或不调用$(this).submit()留在页面上。

NVM,对不起,我有点蠢。所以我只需要删除prefentDefault并返回true。

这是我最好的代码:
$('form#form').submit(function(e) {
let gambarTersisa = [];
let gambarNodes = document.querySelectorAll('span[contenteditable] img, figure[contenteditable] img');
for (let index = 0; index < gambarNodes.length; index++) {
gambarTersisa[index] = gambarNodes[index].src;
}
$(this).append(
$("<input>")
.attr('type', 'hidden')
.attr('name', 'gambar')
.attr("value", gambarTersisa)
);
return true;
});

谢谢

相关内容

  • 没有找到相关文章

最新更新