所以,我在使用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;
});
谢谢