Javascript'te döngü işlevi için hata alıyorum

Bu SELECT eleman değerlerini çağırmak için bir işlevdir. ama bir hatayla karşılaşıyorum. kod burada.

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

it shows an error like "Uncaught TypeError: Cannot read property 'value' of undefined"

ama bazı littel değişiklikleri yaptığımda işe yarıyor ..

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

Kodu yazmanın yanlış olduğunu bilmiyorum.

1
aslında all_categories_1 nedir?
katma yazar Soundar Rathinasamy, kaynak
Neden döngü değişkeni için var kullanmıyorsunuz, neden bir stringi setTimeout 'a aktarıyorsunuz?
katma yazar ThiefMaster, kaynak
@soundar: all_categories_1 bir HTML SELECT öğesidir.
katma yazar Shahrukh, kaynak

3 cevap

Yineleyici, dizinin uzunluğu daha az olduğunda dizin koşulunuzu değiştirin veya undefined dizini foo.length :

for(var m=0;m

... ve her zaman değişkenleri var anahtar sözcüğü ile belirtin veya kötü şeyler olur ve JSLint bunun hakkında (ve haklı olarak, ama bu başka bir konu).

2
katma
Bir dizinin tüm öğeleri üzerinde yineleme yapmak istiyorsanız, o zaman evet. Bir dizinin ilk elemanı 0 dizinindedir, böylece son öğe toplam eleman sayısıdır - 1 . Umarım bu açıktır.
katma yazar karim79, kaynak
Teşekkürler Karim. işe yarıyor. ama bana 1 şey söyle, "= <" veya "> =" kullanmak için yanlış bir şey.
katma yazar Shahrukh, kaynak
Evet Karim, bu kuralı biliyorum .. ama şimdi anlıyorum ki sorun neresiydi. çok teşekkürler.
katma yazar Shahrukh, kaynak
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();

Her neyse, eğer dizinin elemanlarını , ile sınırlayıcı olarak bir dizgeye katılmak isterseniz, neden olmasın:

console.log(foo.join());
1
katma
Cevabınız ve join() işlevi için teşekkürler pimvdb.
katma yazar Shahrukh, kaynak

At the top of the for loop, m<=foo.length; should instead be m.

0
katma
Bana cevap verdiğin için teşekkürler Hammerite.
katma yazar Shahrukh, kaynak