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_licess = 60,则价格应为 60 美元。

它适用于除 2 - 9 之外的所有值。如果我输入 2-9,则使用 fp[10] 中的价格。但是,如果它是 1,那么我得到 12.50。

保重,李

4

3 回答 3

1

当您遍历对象的索引时,它们被键入为字符串。您的 > 比较实际上是按字母而不是数字对它们进行排序。解析其数值以使其正常工作。(按字母顺序,“2”出现在所有以“1”开头的值之后,包括“10”,因此“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 的结果为假。您应该首先使用该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 是一个字符串类型的属性名称。

尝试将您的代码更改为

var lp = [];

那么索引将是一个数字。

于 2012-07-13T03:36:13.490 回答