2015-03-30 2 views
1

Я столкнулся с этим кодом, чтобы выделить его в JavaScript. Когда я разобрался и побежал на своей машине, а не jsFiddle, я получил следующую ошибку.Uncaught RangeError: Максимальный размер стека вызовов превышен с помощью setTimeout()

Uncaught RangeError: Maximum call stack size exceeded

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; 
} 
+1

Вы должны передать функцию setTimeout, а не ее результат: 'setTimeout (function)', а не 'setTimeout (function())' – georg

+0

@georg Я пробовал это, но он по-прежнему бросает ту же ошибку – plotplot

ответ

0

Вы должны передать ссылку на функцию функции 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, 5000); 
} 
else return; 

return seltxt; 
} 

Не уверен, что последний раз, когда вы вызываете .text после вызова функции.

+0

у меня есть попробовал это, он не работает неудачно и вызывает ту же ошибку – plotplot

Смежные вопросы