Javascript =使用逗号分隔符求和后为NAN

Javascript =使用逗号分隔符求和后为NAN,javascript,jquery,Javascript,Jquery,我不熟悉javascripting。但是当我把文本字段中的值相加时。它给了我一个惊喜。 我能用这个做什么 $(document).on('keyup', '#family_home,#home_contents,#motor_vehicle', function() { updateTotal(); }); var updateTotal =function() { var a = $('#family_home').val(); $('#family_home')

我不熟悉javascripting。但是当我把文本字段中的值相加时。它给了我一个惊喜。 我能用这个做什么

$(document).on('keyup', '#family_home,#home_contents,#motor_vehicle', function() 
{
    updateTotal();
});

var updateTotal =function() 
{
    var a = $('#family_home').val();
    $('#family_home').val(a.toString().replace(/,/g, "").replace(/\B(?=(\d{3})+        (?!\d))/g, ","));
    var b = $('#home_contents').val();
    $('#home_contents').val(b.toString().replace(/,/g, "").replace(/\B(?=(\d{3})+    (?!\d))/g, ","));
    var c = $('#motor_vehicle').val();
    $('#motor_vehicle').val(c.toString().replace(/,/g, "").replace(/\B(?=(\d{3})+(?!\d))/g, ","));
    var d = document.getElementById('Total');

    d.value=0;
    d.value=parseFloat(d.value);
    d.value=parseFloat('#family_home') + parseFloat('#home_contents') + parseFloat('#motor_vehicle');
}
请帮帮我。或者修改我的代码

$(document).on('keyup', '#family_home,#home_contents,#motor_vehicle', function() 
{
    updateTotal();
});

var updateTotal =function() 
{
    var a = $('#family_home').val();
    $('#family_home').val(a.toString().replace(/,/g, "").replace(/\B(?=(\d{3})+        (?!\d))/g, ","));
    var b = $('#home_contents').val();
    $('#home_contents').val(b.toString().replace(/,/g, "").replace(/\B(?=(\d{3})+    (?!\d))/g, ","));
    var c = $('#motor_vehicle').val();
    $('#motor_vehicle').val(c.toString().replace(/,/g, "").replace(/\B(?=(\d{3})+(?!\d))/g, ","));
    var d = document.getElementById('Total');

    d.value=0;
    d.value=parseFloat(d.value);
    d.value= parseFloat(a) + parseFloat(b) + parseFloat(c);
}
应该是

d.value=parseFloat($('#family_home').val()) + parseFloat($('#home_contents').val()) + parseFloat($('#motor_vehicle').val());
正如RobG所指出的,您还有许多冗余的parseFloat()调用和toString()调用

编辑:首先删除逗号

d.value=parseFloat(a.replace(/,/g, '')) + parseFloat(b.replace(/,/g, '')) + parseFloat(c.replace(/,/g, ''));

看起来你对你正在清理和总结的东西有点困惑

尝试将代码分成多个部分:

  • 获取值
  • 清理它们
  • 求和
  • 你应该得到这样的结果

    编辑:根据@CrazySheep的评论,更正正则表达式以清除值,并在总数中添加了一些格式

    var updateTotal = function() 
    {
        // get the values
        var a = $('#family_home').val();
        var b = $('#home_contents').val();
        var c = $('#motor_vehicle').val();
        var d = document.getElementById('Total');
    
        // clean (i.e. remove commas)
        a = a.replace(/,/g, "");
        b = b.replace(/,/g, "");
        c = c.replace(/,/g, "");
    
        // calculate the total
        var total = parseFloat(a) + parseFloat(b) + parseFloat(c);
    
        // format the total (comma separators) and update the html element 
        d.value = total.replace(/\B(?=(\d{3})+(?!\d))/g, ",");
    }
    

    parseFloat('#family_home')
    etc.返回
    NaN
    。为什么要将jQuery选择器传递给
    parseFloat()
    ?表单控件值始终是字符串,没有必要对
    toString
    @MattBall进行挑剔操作试图解析恰好位于jQuery selecor的fomat中的非数字字符串。作为一个额外的改进,我建议使用有意义的变量名。通过使用
    home
    contents
    vehcile
    totalAmount
    而不是
    a
    b
    c
    d
    ,代码将更具可读性,因此更易于维护。但这只是个旁注。(我知道它已经2天了,但是)你的clean部分又添加了逗号-parseFloat会忽略它并返回一个错误的数字。谢谢@Crazysheep,我已经更新了我的答案,所以放置逗号分隔符的正则表达式只有在总数被删除后才被应用calculated@jasonscript别担心,你的答案现在要完整得多,格式也更好了,谢谢。但为什么它只对逗号前的第一个数字求和呢?例如11232+11213=22@user3192596我知道已经两天了,但如果你仍然想知道它是什么,因为parseFloat只能转换数字字符。因此,它将只转换为逗号,因为逗号不是数字。一个解决方案是使用正则表达式删除逗号。我知道这已经有2天了,但是你传入变量a、b和c的方式将包含逗号。因此他运行a.toString().replace(/,/g,“”)。我编辑了我的答案,也考虑到了这一点(我第一次没有仔细查看正则表达式,第二次替换时重新插入了逗号)
    var updateTotal = function() 
    {
        // get the values
        var a = $('#family_home').val();
        var b = $('#home_contents').val();
        var c = $('#motor_vehicle').val();
        var d = document.getElementById('Total');
    
        // clean (i.e. remove commas)
        a = a.replace(/,/g, "");
        b = b.replace(/,/g, "");
        c = c.replace(/,/g, "");
    
        // calculate the total
        var total = parseFloat(a) + parseFloat(b) + parseFloat(c);
    
        // format the total (comma separators) and update the html element 
        d.value = total.replace(/\B(?=(\d{3})+(?!\d))/g, ",");
    }