2012-07-17 74 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]每个循环? 试着把它放在变量之前。