【问题标题】:Uncaught RangeError: Maximum call stack size exceeded with setTimeout() [duplicate]未捕获的 RangeError:setTimeout() 超出了最大调用堆栈大小 [重复]
【发布时间】:2015-03-30 18:28:24
【问题描述】:

我发现这段代码是为了在 JavaScript 中突出显示。当我在自己的机器上而不是 jsFiddle 上运行并运行时,我收到了以下错误。

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

http://jsfiddle.net/jme11/bZb7V/

为了解决这个问题,我查看了 StackOverflow 上的其他问题并添加了 setTimeout() 函数,但我仍然收到错误消息。怎么会?

function getSelection() 
{
    var seltxt = '';

     if (window.getSelection) 
     { 
         seltxt = setTimeout(window.getSelection(), 5000); 
     } 
     else if (document.getSelection) 
     { 
         seltxt = setTimeout(document.getSelection(), 5000); 
     } 
     else if (document.selection) 
     { 
         seltxt = setTimeout(document.selection.createRange().text, 5000); 
     }
    else return;

    return seltxt;
}

【问题讨论】:

  • 您必须将函数传递给 setTimeout,而不是其结果:setTimeout(function),而不是 setTimeout(function())
  • @georg 这个我试过了,还是报同样的错误

标签: javascript jquery html


【解决方案1】:

您必须将对该函数的引用传递给 setTimeout 函数。你是直接调用函数,应该如下: 函数获取选择() { var seltxt = '';

 if (window.getSelection) 
 { 
     seltxt = setTimeout(window.getSelection, 5000); 
 } 
 else if (document.getSelection) 
 { 
     seltxt = setTimeout(document.getSelection, 5000); 
 } 
 else if (document.selection) 
 { 
     seltxt = setTimeout(document.selection.createRange, 5000); 
 }
else return;

return seltxt;
}

不确定最后一个,因为您在函数调用之后调用 .text。

【讨论】:

  • 我试过这个,不幸的是它不起作用并导致同样的错误
猜你喜欢
  • 2013-05-04
  • 2020-10-02
  • 2017-04-12
  • 2012-06-17
  • 2018-02-28
  • 1970-01-01
  • 2014-08-01
相关资源
最近更新 更多