2013-04-20 64 views
0

我這裏的JC代碼塊: $JavaScript的for循環被跳過,沒有錯誤

function Test() { 
     var form = $('form').serializeArray(); 
     var str = ""; 
     var Price = {}; 
     var OneUp = 1; 
     var NextName = ""; 
     var PriceIndex = 0 
    for (var i = 0, l = form.length; i < l; i++) { 
     OneUp = i + 1; 
     if (form[i].name.indexOf("_Sel_") != -1) { 
      NextName = form[OneUp].name.substring(0, form[OneUp].name.indexOf(":")); 
      Price[PriceIndex] = form[OneUp].name.substring(form[OneUp].name.indexOf(":") + 1, form[OneUp].name.length); 
      PriceIndex += 1; 
      str += form[i].name.replace("_Sel_", "") + ': <span class="ColorMe">' + NextName + "</span><br/>"; 
     } 
    } 

    for (var i = 0, l = Price.length; i < l; i++) { 
     Price[i] = parseFloat(Price[i]) + .05; 
    } 
    var Total = 0.05; 
    for (var i = 0, l = Price.length; i < l; i++) { 
     Total += Price[i]; 
    } 
    $(".PriceMe").html(Total.toString()); 
    $(".UpdateMe").html(str); 

}; 

對於此部分代碼被跳過沒有明顯的原因或任何錯誤:

for (var i = 0, l = Price.length; i < l; i++) { 
    Price[i] = parseFloat(Price[i]) + .05; 
} 
var Total = 0.05; 
for (var i = 0, l = Price.length; i < l; i++) { 
    Total += Price[i]; 
} 
$(".PriceMe").html(Total.toString()); 

任何人都可以請向我解釋爲什麼和/或解決我目前的問題。 另外我也道歉,我是一個新手JC編碼器,所以你在我的代碼中看到的任何樣式或其他問題都會很樂意接受。 Thxs。

+0

Price.length在此處未定義... – Anshul 2013-04-20 20:32:53

+0

Thxs大家你的答案已經死了。 – DirtyRedz 2013-04-20 20:44:37

回答

0

價格是一個對象({}),所以它不具備長度財產 要經過對象,你需要爲例子做:

var obj = {}; 
obj['key'] = 'value'; 
obj['key2'] = 'value2'; 
for(var val in obj){ 
    //val => key 
    //obj[val] => value 
} 
+0

工作就像我的魅力,謝謝。 我不明白表單如何具有.length屬性,但Price不。 – DirtyRedz 2013-04-20 20:38:22

+0

導致serializeArray返回一個數組:[http://api.jquery.com/serializeArray/](http://api.jquery.com/serializeArray/)高興得到標記 - 謝謝^^ – Adidi 2013-04-20 20:40:10

0

Price.length在這一點上是不明確的,以便使用此:

for (var i = 0, l = $(Price).length; i < l; i++) { 
     Price[i] = parseFloat(Price[i]) + .05; 
    } 
    var Total = 0.05; 
    for (var i = 0, l = Price.length; i < l; i++) { 
     Total += Price[i]; 
    } 
    $(".PriceMe").html(Total.toString()); 

和訪問OBJ值,您可以使用for(var key in obj)

0

您在var PriceIndex = 0之後忘了分號。沒有必要在for循環中聲明數百個變量。您只需簡單地使用(var i = 0; i < Price.length; i++)即可。

如果您聲明多個變量後,對方就可以做到這一點是這樣的:

var a = 0, b = 1, c = 2; 

你並不需要使用var的全部時間。 length方法僅適用於數組或html元素集合。爲了從一個對象中獲取屬性,使用in這樣的關鍵字來循環該對象for (i in object)要訪問對象,您可以使用object.propertyobject["property"](如果這樣做的話),javascript會認爲屬性是一個變量,並且將要搜索它會發現它會返回值並開始在該對象中搜索,如果該值不是字符串,或者該值不會在該對象中找到,javascript將返回值undefined

編輯:

形式具有長度屬性因爲jQuery搜索DOM該元素,並且它返回一個html元素集合,它像一個陣列具有的長度屬性。