jQuery bind('click')产生RangeError

时间:2015-01-30 16:38:58

标签: javascript jquery jquery-ui

我们有一个按钮,当点击它时,会启动一个事件:

buttonElement.click(function (e) {  });

单击时,此按钮会产生一个奇怪的错误:

  

未捕获RangeError:超出最大调用堆栈大小

我已将错误隔离到jQuery的makeArray方法,该方法试图将具有310,977个元素的数组传递给results.push方法,如下所示:

enter image description here

我看到这可能是一个问题,因为你可以尝试推送到数组上的元素数量必然有限制,但我的问题是为什么这个错误首先发生?遍历堆栈,我发现我们停在下面的jQuery UI函数中:

enter image description here

this.options.handle设置为falsethis.element表示单个元素。因此,这与调用jQuery(false, '#modalDialog').find('*')相同。不确定第一个参数是什么,但如果我们试图找到#modalDialog的所有子节点,我们会找到大约86个节点,而不是它以某种方式找到的310,977个元素。

有没有人知道可能导致错误的原因?我应该采取不同的做法吗?仅供参考,我们使用的是jQuery v1.3.2和jQuery UI 1.6rc6。

1 个答案:

答案 0 :(得分:0)

只使用事件委派而不是尝试将事件绑定到每个元素。在1.3.2版本中,您需要使用.live()。将事件绑定到单个元素非常繁琐。

你可能想做这样的事情:

$('#modalDialog').live('click', function(e) {});

它会降低客户端的负担,并捕获#modalDialog元素内发生的点击事件。