2

我试图使用 jQuery 执行简单的计算,但结果是 NaN。

这是我的javascript:

$(document).on('click','.button-group button:not(.done)', function(e){
        e.preventDefault();
        $(this).addClass('active');
        var votevalue = $(this).data('votevalue');
        var image_id = $('.mainimage').data('image_id');
        var votes = $('.mainimage').data('numvotes');
        var totalscore = $('.mainimage').data('totalscore');
            $.ajax({
                type: 'POST',
                url: '?a=vote',
                data: {
                    "votevalue" : votevalue,
                    "image_id" : image_id
                },
                success: function(){
                    var votes = parseInt(votes);
                    votes++;
                    var average = ((parseInt(totalscore) + parseInt(votevalue)) / votes);
                    $('#vote-incremenet').html(votes);
                    $('#display-average').html(average);
                    $('#display-average').show();
                    $('.button-group button').addClass('done');
                }
        }); // end ajax
}); // end click

我究竟做错了什么?

4

1 回答 1

3

当您使用 parseInt 时,请务必传递(parseInt(str), radix)以防止自动转换为其他基础。

如果输入字符串以“0x”或“0X”开头,则基数为 16(十六进制)。

如果输入字符串以“0”开头,则基数为八(八进制)。这个特性是非标准的,一些实现故意不支持它(而是使用基数 10)。

由于这个原因,在使用 parseInt 时总是指定一个基数。

( MDN )

在你的情况下,parseInt(varname, 10);


如果问题仍然存在,则很可能您将不正确的值传递给您用于计算的变量之一。


编辑:

var votes = parseInt(votes);回调内部使其成为局部变量。因此,它失去了外界赋予它的价值。不要在回调中重新声明它。

于 2012-11-10T23:03:52.263 回答