JQuery计算产生NaN结果

Rob*_*ght 2 math jquery

此代码在揭示和隐藏容器的过程中完全正常运行,但计算产生的是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);
Run Code Online (Sandbox Code Playgroud)

}); }

奇妙

Dav*_*ang 5

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

例如

var quantity = $('#product_quantity_PRI_' + this.alt).val(); // brackets
Run Code Online (Sandbox Code Playgroud)

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

var quantity = +$('#product_quantity_PRI_' + this.alt).val();
Run Code Online (Sandbox Code Playgroud)