2011-10-28 7 views
1

これはSELECT要素の値を呼び出す関数です。私はエラーに直面しています。 コードはこちらです。JavascriptのFor Loop関数からエラーが発生しています

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(); 

私は、コードを書くことが間違っているところを知りません。

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

:イテレータが配列の長さよりも小さい、またはあなたがインデックスfoo.lengthで、存在しない要素を打ったとき、あなたがundefinedを得るでしょうしながら、

+0

なぜループ変数に 'var'を使わないのですか?文字列を' setTimeout'に渡すのはなぜですか? – ThiefMaster

+0

実際にall_categories_1は何ですか? –

+0

@soundar:all_categories_1はHTML SELECT要素です。 – Shahrukh

答えて

2

を実行するには、あなたのループ条件を変更します。そして、常にvarキーワードで変数を宣言すると、悪いことが起こります.JSLintはそれについて泣き言を言います(そしてそうですが、それは別の話題です)。あなたは、単に区切り文字として,、との文字列に配列の要素に参加したい場合は

+0

ありがとうございました。できます。 1つのことを教えてください、 "= <" or "> ="使い方が間違っています。 – Shahrukh

+0

配列のすべての要素を反復処理する場合は、yesを指定します。配列の最初の要素はインデックス '0'にあるので、最後の要素は 'total number of elements - 1'にあります。希望は分かります。 – karim79

+0

yehカリム、私はそのルールを知っている..しかし、私はちょうど今どこに問題があるのか​​理解しています。どうもありがとう。 – 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

答えとjoin()関数のためにpimvdbに感謝します。 – Shahrukh

0

forループの先頭で、m<=foo.length;ではなくm<foo.length;する必要があります。

+0

私に答えてくれたHammeriteに感謝します。 – Shahrukh

関連する問題