【问题标题】:jquery .on gets Uncaught RangeError: Maximum call stack size exceededjquery .on 获取未捕获的 RangeError:超出最大调用堆栈大小
【发布时间】:2013-10-17 16:40:25
【问题描述】:

我几乎阅读了所有关于

的 SO 问题

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

但不适合我。

我的问题是我在加载后更改了一些 div 文本,这对我有用。但是,控制台显示 Uncaught RangeError 错误。 这是我的 JS:

<script type="text/javascript">
            $('#report-error').on("DOMNodeInserted DOMCharacterDataModified" ,function(){
                $('#report-error').text("error happened");

            });           
 </script>

这是我应用 jquery 后的 HTML:

<div id="report-error" class="report-div error" 
style="display: block;">error happened
</div>

任何帮助将不胜感激。

【问题讨论】:

  • 这里看起来不错jsfiddle.net/u7nU5
  • @iJay - 那我为什么会收到这个错误?!
  • 如果您可以在 jsfiddle 中创建问题..这对我们进行调查会有所帮助,否则我们没有任何要调试的东西....希望你明白了跨度>
  • @iJay - 正在努力。
  • 你需要先触发事件来复制问题:jsfiddle.net/u7nU5/1

标签: javascript jquery


【解决方案1】:

发生错误是因为在运行 jQuery 方法.text() 时触发了DOMNodeInserted 事件,因为该方法将文本节点插入到容器中。

简而言之 - 处理程序将调用它自己的事件...

您可以使用one 而不是on 来解决它,但副作用取决于您的其余逻辑。

$('#report-error').one("DOMNodeInserted" ,function(){
    $('#report-error').text("error happened");
});

【讨论】:

  • 通过尾递归无限循环。
  • +1 好点,但它可以解决吗,还是我应该保持原样而不包括任何伤害?!
  • @mamdouhalramadan 我添加了一个可能的解决方案。
  • @David - .one 每个事件 1 次都可以正常工作。那么,我的函数就不会被触发了。
  • @mamdouhalramadan 好吧,现在您知道问题所在了,我相信您可以找到解决方案...想到使用不同的 DIV 进行错误报告。
猜你喜欢
  • 2013-05-17
  • 1970-01-01
  • 2012-08-15
  • 2012-03-30
  • 1970-01-01
  • 2014-08-01
  • 1970-01-01
相关资源
最近更新 更多