2011-10-28 43 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