所以,我在使用 jquery“in”提交处理程序提交表单时出错 像这样
$('form#form').submit(function(e){
e.preventDefault();
$(this).submit();
});
但是我出错了
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()
留在页面上。