0

我这里有一段 JC 代码:$

 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 编码器,因此您在我的代码中看到的任何样式或其他问题都将被欣然接受。谢谢。

4

3 回答 3

2

Price是一个对象 ( {}),因此它没有长度属性来遍历您需要执行的对象,例如:

var obj = {};
obj['key'] = 'value';
obj['key2'] = 'value2';
for(var val in obj){
   //val => key
   //obj[val] => value
}
于 2013-04-20T20:32:26.707 回答
0

你忘记了后面的分号var PriceIndex = 0。不需要在 for 循环中声明一百个变量。你可以简单地使用 for (var i = 0; i < Price.length; i++)

如果您一个接一个地声明多个变量,您可以这样做:

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

你不需要使用var整个时间。该length方法仅适用于数组或 html 元素集合。为了从一个对象中获取属性,您使用这样的in关键字循环该对象for (i in object)要访问您使用的对象,object.property或者object["property"]如果您这样做object[property],javascript会认为属性是一个变量,并且将搜索它,如果它找到如果该值不是字符串,则 javascript 将返回该值并开始在该对象中搜索,或者在该对象中找不到该值,则 javascript 将返回 value undefined

编辑:

form 有一个 length 属性,因为 jQuery 在 DOM 中搜索那个元素,它返回一个 html 元素集合,它就像一个数组一样有 length 属性。

于 2013-04-20T20:51:33.070 回答
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).

于 2013-04-20T20:36:34.860 回答