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

问题描述 投票:0回答:1

所以,我在使用 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();
    });
javascript jquery submit form-submit
1个回答
0
投票

结果表明调用

$(this).submit()
时jQuery调用提交使用jQuery添加的事件处理程序。这种无限递归被检测到并报告为堆栈空间不足。

这与普通 JavaScript 不同,后者在提交处理程序中调用

form.submit
不会再次调用处理程序。

一个解决方案是不要无条件地调用

$(this).submit()
- 必须有一种方法可以让提交发生(在不调用
e.preventDefault
之后)或者不调用
$(this).submit()
留在页面上。

© www.soinside.com 2019 - 2024. All rights reserved.