0

次のコードがあります。

var license_price = 0;
    var num_licenses = jQuery('#num_licenses').val();
    var lp = {};

                lp[1]=12.50;
                lp[10]=15.50;
                lp[50]=50.00;

    for(var index in lp) {alert(index);
        if (num_licenses >= index){
            license_price = parseFloat(lp[index]);
        }
    }
    //alert(license_price);
    jQuery('#total_price').val((num_licenses * license_price));

このコードは、num_licenses ボックスに入力された値を決定し、配列 lp を調べて、各キーの値に基づいて価格を割り当てます。したがって、num_licenses = 8 の場合、価格はそれぞれ 12.50 で、num_licenses = 60 の場合、価格は $60 です。

2 ~ 9 を除くすべての値で機能します。2 ~ 9 を入力すると、fp[10] の価格が使用されます。しかし、1 の場合は 12.50 になります。

気をつけて、リー

4

3 に答える 3

1

オブジェクトのインデックスを反復処理すると、それらは文字列として入力されます。>比較は、実際には数値ではなくアルファベット順に並べ替えています。これを機能させるには、数値を解析します。(アルファベット順で「2」は、「10」を含む「1」で始まるすべての値の後に発生するため、「2」>「10」など)

for(var index in lp) {
    alert(index);
    if(lp.hasOwnProperty(index)) { // prevent comparison when property inherited
        if (num_licenses >= parseInt(index,10) ){
            license_price = parseFloat(lp[index]);
        }
    }
}
于 2012-07-13T03:25:14.187 に答える
1

問題は、文字列を整数と比較していることです。val()関数の結果は文字列です。したがって、入力が '2' の場合、'2' <= 10 の結果は false です。関数を使用して、最初に整数に変換する必要がありparseInt()ます。

これは次のようになります。

var license_price = 0;
var num_licenses = parseInt(jQuery('#num_licenses').val(),10);
var lp = {};

            lp[1]=12.50;
            lp[10]=15.50;
            lp[50]=50.00;

for(var index in lp) {alert(index);
    if (num_licenses >= index){
        alert("Greater than " + index);//added this for debugging
        license_price = parseFloat(lp[index]);
    }
}
//alert(license_price);
jQuery('#total_price').val((num_licenses * license_price));

値に parseInt() 呼び出しを追加したことに注意してください。また、何が起こっているかを確認できるように、いくつかのアラート コールも追加しました。

テストできるように、jsFiddle スニペットへのリンクを次に示します: http://jsfiddle.net/CmbvW/8/

于 2012-07-13T03:48:36.557 に答える
0

コードでは、lp は配列ではなくオブジェクトであるため、index は String 型のプロパティ名です。

コードを次のように変更してみてください

var lp = [];

インデックスは数値になります。

于 2012-07-13T03:36:13.490 に答える