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元素集合,它像一个阵列具有的长度属性。