Javascript 对于循环和计时,需要调试帮助吗

Javascript 对于循环和计时,需要调试帮助吗,javascript,for-loop,Javascript,For Loop,正在尝试调试以下代码 function split(toRead, toReplace, speed) { var words = $(toRead).html().split(" "); for (var i = 0; i < words.length; i++) { //console.log(words[i]); setTimeout(function () { $(toReplace).html(words[i

正在尝试调试以下代码

function split(toRead, toReplace, speed) {
    var words = $(toRead).html().split(" ");
    for (var i = 0; i < words.length; i++) {
        //console.log(words[i]);
        setTimeout(function () {
            $(toReplace).html(words[i]);
        }, speed * i);
    }
}
代码应该接收一个文本块“toRead”,将其分解为单词,然后用每个单词替换“toReplace”,并设置时间间隔。我喜欢

然而,它似乎不起作用。我猜这与时间有关,for循环好像是for循环结束了,不管计时器是什么,使得单词[I]每次都读同一个单词

非常感谢您的帮助,谢谢各位: 干杯 Nir

尝试使用以下方法:

<!DOCTYPE html>
<html>
<head>
<script type="text/javascript" src="jquery.js"></script>
</head>
<body>
<div id="toRead">This is a sample text do demonstrate that the code below works fine. Please test this code and vote up if it works for you !!</div>
<div id="results"></div>
<script type="text/javascript"> 
var ctr=0;
function displayWords(words,len,toReplace,speed){
    if(ctr<len){
        setTimeout(function(){
            $(toReplace).html(words[ctr]);
            ctr++;
            displayWords(words,len,toReplace,speed);
        },speed);
    }
}

function split(toRead, toReplace, speed) {
    var words = $(toRead).html().split(" ");
    displayWords(words,words.length,toReplace,speed);
}

split(document.getElementById("toRead"),document.getElementById("results"),200);
</script>
</body>
</html> 
说明:在for循环中使用setTimeout时,JavaScript引擎不会延迟代码执行并等待超时

因此,正确的方法是使用递归函数,然后检查是否未达到计数,然后再次调用相同的函数。继续此操作直到达到计数。这样,您就可以拥有所需的功能。

您可能希望附加到toReplace DIV的内容中。在您的问题中,您只需更改其内容,如下所示

$('#toReplace').html(words[i]);
如果你想追加,你应该这样做

$('#toReplace').html().append(" " + words[i]);
请注意,使用了$'toReplace'而不是$toReplace-这意味着您希望以ID为toReplace的元素为目标

但是,如果像这样将元素直接传递给方法,则应该直接使用


如果你也解释了你的解决方案,你的答案会更有用。你做了什么?为什么?@FelixKling我已经在上面的代码中添加了解释。为什么我的答案是-1?我已经测试了代码,并且完全按照www.spreeder.com的工作方式工作。那问题是什么?谢谢,这确实解决了我的问题。但我很沮丧,因为我不可能在我的电脑上找到答案。。。只是一个沮丧的设计师,不用担心:再次感谢!问题是关于延迟显示单个单词。用户提到了示例www.spreeder.comAh,好的。无论如何,问题的答案由粗体文本指定。谢谢你的通知。
toReplace.html(words[i]); // and so on.. don't use $(toReplace)