2011-10-28 29 views
1

这是一个调用SELECT元素值的函数。但我面临着一个错误。代码在这里。我从Javascript中的For循环函数获取错误

function get_s_val(){ 
var foo = all_categories_1; 
var ov1 = ""; 

    for(m=0;m<=foo.length;m++){ 
     ov1 += foo[m].value+','; 
    } 

console.log(ov1); 
var tme=setTimeout("get_s_val()", 1000); 
} 
get_s_val(); 

它显示像"Uncaught TypeError: Cannot read property 'value' of undefined"

一个错误,但是当我做一些改变LITTEL它的工作原理..喜欢

function get_s_val(){ 
var foo = all_categories_1; 
var ov1 = ""; 

    //for(m=0;m<=foo.length;m++){ 
     ov1 += foo[0].value+','; 
    //} 

console.log(ov1); 
var tme=setTimeout("get_s_val()", 1000); 
} 
get_s_val(); 

我不知道我在哪里错写的代码。

+0

为什么你不使用'var'作为循环变量,为什么你要传递一个字符串到'setTimeout'? – ThiefMaster

+0

实际上all_categories_1是什么? –

+0

@soundar:all_categories_1是一个HTML SELECT元素。 – Shahrukh

回答

2

修改你的循环条件下运行,而迭代器是阵列的小于长度,否则你会得到undefined当你到了不存在的元素在指数foo.length

for(var m=0;m<foo.length;m++){ 
    ov1 += foo[m].value+','; 
} 

。 ..并且总是用var关键字声明变量,否则就会发生不好的事情,JSLint会抱怨它(正确的,但这是另一个话题)。

+0

感谢Karim。有用。但告诉我1件事,是“= <" or "> =”使用错误的东西。 – Shahrukh

+0

如果你想迭代一个数组的所有元素,那么是的。数组的第一个元素位于索引'0',所以最后一个元素位于'元素总数 - 1'。希望这是明确的。 – karim79

+0

叶卡里姆,我知道这个规则..但我现在才明白,问题出在哪里。非常感谢。 – Shahrukh

1
function get_s_val(){ 
    var foo = all_categories_1; 
    var ov1 = ""; 

     for(var m = 0; m < foo.length; m++){ // use var, and only loop from e.g. 
              // 0 to 2 when the length is 3, so <, 
              // not <= 
      ov1 += foo[m].value+','; 
     } 

    console.log(ov1); 

    setTimeout(get_s_val, 1000); // don't use a string, just pass the function. 
           // Plus, the variable is nowhere accessible so 
           // you can drop storing it 
} 

get_s_val(); 

无论如何,如果你只是想加入数组的元素融入一个字符串,作为分隔符,为什么不这样做:

console.log(foo.join()); 
+0

感谢pimvdb为你的答案和join()函数。 – Shahrukh

0

for循环的顶部,m<=foo.length;应改为m<foo.length;

+0

谢谢Hammerite回答我。 – Shahrukh