2012-07-17 152 views
0

我有這部分代碼:的Javascript返回undefined可變

for (i = 0; i <= texte.split(';')[1].split(',').length - 1; i++) { 
     cell = document.createElement("td"); 
     cell.setAttribute("width", "10%"); 
     cell.setAttribute("align", "center"); 
     if (texte.split(';')[1].split(",")[i] != "") 
      cell.onclick = function() { chgnom('1',"'" + texte.split(';')[1].split(",")[i] + "'",''); }; 
     textnode = document.createElement("span"); 
     textnode.innerHTML = texte.split(';')[1].split(",")[i]; 
     cell.appendChild(textnode); 
     row.appendChild(cell); 
    } 

在innerHTML來texte.split(';')[1].split(",")[i]調用返回「HELLO」,而是「不確定」的一個函數返回。有人可以幫助我嗎?

謝謝

+2

你能向我們展示一個關於http://JSFiddle.net的演示嗎? – 2012-07-17 12:45:07

+0

你的例子需要有更多的信息。如果它是未定義的,你可能會分裂一些不存在的東西。 – Fallenreaper 2012-07-17 12:47:29

+0

什麼是texte的價值?行變量decalred在哪裏? – Nirmal 2012-07-17 12:48:06

回答

4

讓我們假設arr=texte.split(';')[1].split(',')。當您的點擊將被執行時,i將已經等於arr.lengtharr[arr.length]undefined,這就是你得到的。解決方法可能會像:

if (texte.split(';')[1].split(",")[i] != ""){ 
    cell.onclick = (function(inner_i){ 
     return function() { 
      chgnom('1',"'" + texte.split(';')[1].split(",")[inner_i] + "'",''); 
     }; 
    })(i); 
} 
+0

他已經在使用閉包,你發佈的是一個閉包,返回閉包。因爲閉包不是一個返回函數的函數,而是一個動態分配的函數,它可能會或可能不會返回到另一個函數中,而這又可能是或不是閉包。 – Mahn 2012-07-17 12:53:48

+0

謝謝。這解決了我的問題 – Olivier 2012-07-17 12:54:54

+0

@Mahn更正了條款。 – Engineer 2012-07-17 12:55:31

0

你測試你texte.split(';')[1].split(",")[i]每個循環? 試着把它放在變量之前。