javascript - Chrome/jQuery 未捕获范围错误 : Maximum call stack size exceeded

标签 javascript jquery google-chrome webkit stack-overflow

我在 chrome 上收到错误“Uncaught RangeError:超出最大调用堆栈大小”。这是我的 jQuery 函数

$('td').click(function () {
        if ($(this).context.id != null && $(this).context.id != '') {
            foo($('#docId').val(), $(this).attr('id'));
        }
        return false;
    });

请注意,页面中有数万个单元格。然而,我通常将堆栈溢出与递归联系起来,在这种情况下,据我所知,没有堆栈溢出。

创建这样的 lambda 是否会自动在堆栈上生成大量内容?有什么办法解决吗?

目前,我唯一的解决方法是在渲染 HTML 时在每个单元格上显式生成 onclick 事件,这会使 HTML 变得更大。

最佳答案

由于“页面中有数以万计的单元格”,将点击事件绑定(bind)到每个单元格将导致严重的性能问题。有一个更好的方法来做到这一点,即将点击事件绑定(bind)到主体,然后找出单元格元素是否是点击的目标。像这样:

$('body').click(function(e){
       var Elem = e.target;
       if (Elem.nodeName=='td'){
           //.... your business goes here....
           // remember to replace $(this) with $(Elem)
       }
})

此方法不仅可以使用 native “td”标记完成您的任务,还可以使用稍后附加的“td”完成您的任务。我想您会对这篇关于 event binding & delegate 的文章感兴趣

<小时/>

或者你可以简单地使用 jQuery 的“.on() ”方法,效果相同:

$('body').on('click', 'td', function(){
        ...
});

关于javascript - Chrome/jQuery 未捕获范围错误 : Maximum call stack size exceeded,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57301030/

相关文章:

jQuery拦截slideToggle()

google-chrome - Chrome 扩展键盘命令似乎没有注册

Javascript:控制谷歌浏览器的打开选项卡音频音量控制

javascript - 网站可以检测您何时将 Selenium 与 chromedriver 一起使用吗?

javascript - 使用depends和max - jquery验证

javascript - 如何在jquery中将密码转换成md5?

javascript - 如何检查我的对象类型是图像?

jquery - 单击外部 jQuery 选择器仍会激活功能

javascript - jQuery 或其他第三方库是否应该与逻辑代码 bundle 在一起?

javascript - 页面刷新时,需要获取输入的值