Chrome / jQuery未捕获RangeError:超出最大调用堆栈大小
我在chrome上收到错误“Uncaught RangeError:Maximum call stack size exceeded”。 这里是我的jQueryfunction
$('td').click(function () { if ($(this).context.id != null && $(this).context.id != '') { foo($('#docId').val(), $(this).attr('id')); } return false; });
请注意,页面中有成千上万的单元格。 但是,我通常会将堆栈溢出与recursion联系起来,在这种情况下,就我所见,没有任何溢出。
像这样创build一个lambda会自动生成堆栈上的东西的负载? 有什么办法吗?
目前唯一的解决方法是在渲染HTML时在每个单元格上明确地生成onclick事件,这使HTML变得更大。
由于“页面中有成千上万的单元格”将单击事件绑定到每个单元格将会导致可怕的性能问题。 有一个更好的方法来做到这一点,即将点击事件绑定到正文,然后找出单元元素是否是点击的目标。 喜欢这个:
$('body').click(function(e){ var Elem = e.target; if (Elem.nodeName=='td'){ //.... your business goes here.... // remember to replace $(this) with $(Elem) } })
这个方法不仅可以用本地“td”标签来完成你的任务,而且还可以用后面附加的“td”来完成你的任务。 我想你会对这篇关于事件绑定和委托的文章感兴趣
或者你可以简单地使用jQuery的“ .on() ”方法,效果相同:
$('body').on('click', 'td', function(){ ... });
当你有一个无限循环时,你也可以得到这个错误。 确保你没有任何无限的,recursion的自引用。
我更是一个错误,发生了什么是循环点击(我猜)基本上通过点击login父母也被点击,最终导致超过最大调用堆栈大小。
$('.clickhere').click(function(){ $('.login').click(); }); <li class="clickhere"> <a href="#" class="login">login</a> </li>
当我在其他许多jQuery插件的网站中使用jQuery Fancybox时,发生了这个问题。 当我使用LightBox( 网站在这里 ),而不是Fancybox,问题就没有了。
你可以使用
$(document).on('click','p.class',function(e){ e.preventDefault(); //Code });