Javascript =使用逗号分隔符求和后为NAN
我不熟悉javascripting。但是当我把文本字段中的值相加时。它给了我一个惊喜。 我能用这个做什么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')
$(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, ''));
看起来你对你正在清理和总结的东西有点困惑 尝试将代码分成多个部分:
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, ",");
}