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.propertyobject["property"]、そうする場合object[property]、javascript はプロパティが変数であると見なし、それを検索し、見つかった場合値が文字列以外の場合、または値がそのオブジェクトで見つからない場合、javascript は値を返し、そのオブジェクトで検索を開始します。javascript は value を返しますundefined

編集:

jQuery は DOM でその要素を検索し、配列と同様に length プロパティを持つ html 要素のコレクションを返すため、form には 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 に答える