JQuery计算产生NaN结果

时间:2011-01-26 13:07:26

标签: jquery math

此代码在揭示和隐藏容器的过程中完全正常运行,但计算产生的是NaN。我之前从未尝试过使用JQuery的数学,所以有人可能会告诉我哪里有错误。

function product_analysis_global() {
$(':checked').each(function(){
    $('#product_' + this.alt).css('display','block');
    $('#product_quantity_PRI_' + this.alt).val(this.value);
    var quantity = $('#product_quantity_PRI_' + this.alt).val;
    var price = $('#product_price_PRI_' + this.alt).val;
    var duration = $('#product_duration_PRI_' + this.alt).val;
    var dives = $('#product_dives_PRI_' + this.alt).val;
    var hire = $('#product_quantity_PRI_' + this.alt).val;

    $('#product_price_total_PRI_' + this.alt).val(price * quantity);
    $('#product_duration_total_PRI_' + this.alt).val(duration * quantity);
    $('#product_dives_total_PRI_' + this.alt).val(dives * quantity);
    $('#product_hire_total_PRI_' + this.alt).val(hire * quantity);
});
    $(':not(:checked)').each(function(){
        $('#product_' + this.alt).css('display','none');
        $('#product_quantity_PRI_' + this.alt).val('0');
        var quantity = $('#product_quantity_PRI_' + this.alt).val;
        var price = $('#product_price_PRI_' + this.alt).val;
        var duration = $('#product_duration_PRI_' + this.alt).val;
        var dives = $('#product_dives_PRI_' + this.alt).val;
        var hire = $('#product_quantity_PRI_' + this.alt).val;

    $('#product_price_total_PRI_' + this.alt).val(price * quantity);
    $('#product_duration_total_PRI_' + this.alt).val(duration * quantity);
    $('#product_dives_total_PRI_' + this.alt).val(dives * quantity);
    $('#product_hire_total_PRI_' + this.alt).val(hire * quantity);

}); }

非凡

3 个答案:

答案 0 :(得分:5)

您的所有.val(无括号)都需要括号后跟()。否则,您将获得val 函数,而不是函数返回的实际值。

E.g。

var quantity = $('#product_quantity_PRI_' + this.alt).val(); // brackets

另外,小心.val(),后面会返回字符串。在您的场景中,此处没有错误,因为您只进行乘法,并且字符串将自动转换为数字。但是,如果您有其他内容,字符串将会连接'1' + '1' = '11'。为了防止这种情况(即使在你的例子中也是安全的),在.val()的返回值前加一个加号,将字符串转换为数字:

var quantity = +$('#product_quantity_PRI_' + this.alt).val();

答案 1 :(得分:2)

使用.val()代替.val

答案 2 :(得分:0)

你可能用字符串计算。如果x是数字,则如果有疑问,请使用:

parseInt(x) 

确定是一个数字。