You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

AJAX脚本触发'too much recursion'错误,求排查代码问题

解决'too much recursion'递归溢出问题

嘿,我来帮你揪出这个递归溢出的问题!结合你给出的代码片段和jBox的使用逻辑,大概率是这里的触发逻辑形成了无限循环:

问题根源

你的clickMe函数里创建jBox Modal时,设置了attach: '.pin'和trigger: 'click'——如果这个clickMe函数本身是绑定在.pin元素的点击事件上的(比如你在HTML里写了<button class="pin" onclick="clickMe()">),那麻烦就来了:

  • 你点一下.pin,触发clickMe()执行
  • clickMe()里的jBox会给.pin再绑定一层点击触发逻辑
  • 这就会导致后续(甚至当下)不断触发点击事件,重复调用clickMe(),形成无限递归,最终浏览器就报错“too much recursion”了

另外你的代码里onCloseCompl...被截断了,如果这个关闭回调里又调用了clickMe()或者手动触发了.pin的点击,那也会直接引发递归循环。

给你两个修复方向

方向1:直接手动打开模态框,不用重复绑定触发

既然你已经通过clickMe()来触发模态框,那就没必要让jBox再绑定.pin的点击了,直接创建后手动打开:

function clickMe() { 
  new jBox('Modal', { 
    width: 1000, 
    height: 500, 
    title: 'Admin PIN', 
    theme: 'TooltipBorder', 
    closeButton: 'title', 
    draggable: 'title', 
    animation: false, // 这里注意别加引号,布尔值不需要字符串包裹
    position: { x: 'center', y: 'center' }, 
    offset: { x: 15, y: -10 }, 
    onCloseComplete: function() {
      // 这里写你的关闭完成逻辑,*千万别在这里调用clickMe或者触发.pin的点击哦*
    }
  }).open(); // 手动调用open打开模态框
}

方向2:页面加载时初始化jBox,不用单独写点击函数

如果你的需求就是点击.pin弹出模态框,那完全不需要clickMe(),直接在页面加载好后初始化jBox就行,让它自己绑定点击触发:

// 等页面元素都加载完再初始化
document.addEventListener('DOMContentLoaded', function() {
  new jBox('Modal', { 
    attach: '.pin', 
    width: 1000, 
    height: 500, 
    title: 'Admin PIN', 
    theme: 'TooltipBorder', 
    closeButton: 'title', 
    draggable: 'title', 
    trigger: 'click', 
    animation: false,
    position: { x: 'center', y: 'center' }, 
    offset: { x: 15, y: -10 }, 
    onCloseComplete: function() {
      // 你的关闭逻辑
    }
  });
});

额外小提醒

  • 你代码里的animation: 'false'是个小错误,jBox的animation参数要传布尔值false,传字符串'false'会被浏览器当成“真”值,起不到禁用动画的效果。
  • 一定要补全onCloseComplete的代码检查一遍,确保里面没有触发.pin点击或者调用clickMe()的逻辑,这也是常见的递归坑。

内容的提问来源于stack exchange,提问作者DCJones

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.22 09:21:27