2017-05-08 59 views
0

这是我的代码,并将其从jsTree复选框树形列表获取选项:为什么此警报包含未定义?

var level1, r = []; 

for (i = 0, j = data.selected.length; i < j; i++) { 
    r[0] = data.instance.get_node(data.selected[i]).text.trim(); 
    r[1] = data.instance.get_node(data.selected[i]).parents.length; 

    if(r[1] == 1) { 
     level1 += r[0] + ", "; 
     alert(level1); 
    } 
} 

以上的alert包含undefined从复选框正确的选择一起。任何想法为什么我在输出中未定义?

+0

请发表您的HTML代码,以及为更好地理解。 –

+0

'var level1; var r = [];''level1 = r [0] +“,”;'试试这个 –

+4

您的level1 var是未定义的..将空字符串赋值给它以便您可以连接 –

回答

1

问题是level1是不确定的,当你第一次尝试在这里使用它:

level1 += r[0]+", "; 

这是一样的:

level1 = level1 + r[0]+", "; 

问题是level1通过不确定的第一次迭代等该文本包含undefined并将其连接成一个字符串,因为它被强制连接。它初始化为空字符串:

var level1 = ""; 

这样,当你访问它,它不会是不确定的。

+0

按照Aliens先生的帖子在上面......我简直不敢相信我错过了这个..... –

+0

@Homer_J你下一个问题是如何不留尾随逗号。 ;) – epascarello

+0

@epascarello我以为同样的事xD –

0

var level1, r = []; 
 

 
for (i = 0, j = data.selected.length; i < j; i++) { 
 
    r[0] = data.instance.get_node(data.selected[i]).text.trim(); 
 
    r[1] = data.instance.get_node(data.selected[i]).parents.length; 
 

 
    if(r[1] == 1){ 
 
     level1 += r[0]+", "; 
 
     alert(level1); 
 
    } 
 
}

应该

var level1 = ''; 
 
    //Or leve1 = []; If you really need it as an array. 
 
var r = []; 
 

 
for (i = 0, j = data.selected.length; i < j; i++) { 
 
    r[0] = data.instance.get_node(data.selected[i]).text.trim(); 
 
    r[1] = data.instance.get_node(data.selected[i]).parents.length; 
 

 
    if(r[1] === 1){ 
 
     // level1[0] += r[0]+", "; If array. 
 
     level1 += r[0]+", "; 
 
     alert(level1); 
 
     // alert(level1[0]); If array. 
 
    } 
 
}

level1未定义,因为level1, r = []使得r === []level1 === undefined

所以我建议你显式声明两个变量,如上面的代码块所示。

我也比较固定运营商,see here why

+0

感谢ArchNoob - 赞赏。字符串的确是问题,但正如它发生的那样,上述解决了我在别处面临的另一个问题! –

+0

太棒了!@Homer_J – ArchNoob

+0

“自从您将其声明为...之后,它是一个数组” - 您在哪里看到这些数据?他们明确地连接一个字符串,所以它可能是一个字符串 – Li357