2013-07-20 163 views
0

我试图单独打印单词的每个字母。这个词是变量字符串。string.charAt()返回0

我有下面的代码:

function typewriter() { 
    var el = document.getElementById("typewr"); 
    var string = "Hello"; 

    for(var i=0;i<string.length;i++) { 
     setTimeout(function(){el.innerHTML =+ string.charAt(i);},1000); 
     } 
} 

(有一个<div id="typewr"></div><body>代码下来,它是由<body onLoad="typewriter()">解析)

但由于某些原因,它只是返回0(1秒后)

它为什么这样做?我如何解决它? o.O

回答

2

你需要一个闭包来保持i的值,那么你需要增加每次迭代的超时时间,因为循环不等待下一次超时等等,否则它不会工作,因为所有的超时都会执行在同一时间,当他们这样做i将它设置为最后一个值:

function typewriter() { 
    var el = document.getElementById("typewr"); 
    var string = "Hello"; 

    for(var i=0;i<string.length;i++) { 
     (function(k) { 
      setTimeout(function(){ 
       el.innerHTML += string.charAt(k); 
      },k*1000); 
     })(i); 
    } 
} 

FIDDLE

我并没有改变它,因为它似乎是工作,但作为一般规则string对于变量来说是一个非常糟糕的名称,请使用str或som还没有定义的其他东西。

+0

+1正确的解决方案:) – Sachin

+0

Yay,工作!非常感谢你!! :) – bertcc423

0

el.innerHTML = + string.charAt(ⅰ)

不应它是+的=代替= +。

+0

我实际上写了等号后面的加号(“el.innerHTML = + string.charAt(i);”)o.O – bertcc423