我们有一个按钮,当点击它时,会启动一个事件:
buttonElement.click(function (e) { });
单击时,此按钮会产生一个奇怪的错误:
未捕获RangeError:超出最大调用堆栈大小
我已将错误隔离到jQuery的makeArray
方法,该方法试图将具有310,977个元素的数组传递给results.push方法,如下所示:
我看到这可能是一个问题,因为你可以尝试推送到数组上的元素数量必然有限制,但我的问题是为什么这个错误首先发生?遍历堆栈,我发现我们停在下面的jQuery UI函数中:
this.options.handle
设置为false
,this.element
表示单个元素。因此,这与调用jQuery(false, '#modalDialog').find('*')
相同。不确定第一个参数是什么,但如果我们试图找到#modalDialog
的所有子节点,我们会找到大约86个节点,而不是它以某种方式找到的310,977个元素。
有没有人知道可能导致错误的原因?我应该采取不同的做法吗?仅供参考,我们使用的是jQuery v1.3.2和jQuery UI 1.6rc6。
答案 0 :(得分:0)
只使用事件委派而不是尝试将事件绑定到每个元素。在1.3.2版本中,您需要使用.live()。将事件绑定到单个元素非常繁琐。
你可能想做这样的事情:
$('#modalDialog').live('click', function(e) {});
它会降低客户端的负担,并捕获#modalDialog元素内发生的点击事件。