2013-07-20 165 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