我正在尝试在多个部分中找到输入值的总和。我把我的代码放到了下面。
HTML:
<div class="section">
<input type="radio" name="q1" value="2"/>
<input type="radio" name="q2" value="0"/>
<input type="radio" name="q3" value="1"/>
<input type="radio" name="q4" value="3"/>
</div>
jQuery:
$('.section').each(function(){
var totalPoints = 0;
$(this).find('input').each(function(){
totalPoints += $(this).val();
});
alert(totalPoints);
});
请注意,这是我实际使用的代码的简化版本。所以我希望这可以提醒2个值(每个部分的总和):8然后6.相反,我只是获取所有值的字符串。所以第一部分警告0143。
我是如何获得累积总和而不是字符串的?
答案 0 :(得分:34)
你正在做“1”+“1”,并期望它是2(int)
不是。
非常快速(并且不完全正确)的解决方案是:
$('.section').each(function(){
var totalPoints = 0;
$(this).find('input').each(function(){
totalPoints += parseInt($(this).val()); //<==== a catch in here !! read below
});
alert(totalPoints);
});
赶上?为什么?
答案: 您应该始终使用基数原因如果您不这样做,前导零是八进制!
parseInt("010") //8 ( ff)
parseInt("010") //10 ( chrome)
parseInt("010",10) //10 ( ff)
parseInt("010",10) //10 ( chrome)
好吧......你明白了。供应基数!
最终解决方案(使用.each( function(index, Element) )
)
$('.section').each(function(){
var totalPoints = 0;
$(this).find('input').each(function(i,n){
totalPoints += parseInt($(n).val(),10);
});
alert(totalPoints);
});
答案 1 :(得分:6)
var totalPoints = 0;
$('.section input').each(function(){
totalPoints = parseFloat($(this).val()) + totalPoints;
});
alert(totalPoints);
答案 2 :(得分:4)
该值存储为字符串,因此调用+=
正在进行字符串连接。您希望/需要将其视为一个数字,因此它会添加。使用parseInt()
功能将其转换为数字:
totalPoints += parseInt($(this).val(), 10);
答案 3 :(得分:0)
javascript函数parseInt()应该实现你所需要的,这里是一个小提琴: http://jsfiddle.net/k739M/
一些格式化的代码:
$('.section').each(function(){
var totalPoints = 0;
$(this).find('input').each(function(){
totalPoints += parseInt($(this).val());
});
alert(totalPoints);
});
此外,如果你在'.section input'上调用$(每个),你可以减少处理时间(和代码)。
var totalPoints = 0;
$('.section input').each(function(){
totalPoints += parseInt($(this).val());
});
alert(totalPoints);
答案 4 :(得分:0)
Use eval instead of parseInt
var a = "1.5";
var b = "2";
var c = parseInt(a) + parseInt(b);
console.log(c); //result 3
var a = "1.5";
var b = "2";
var c = eval(a) + eval(b);
console.log(c); //result 3.5 this is accurate
答案 5 :(得分:0)
您还可以使用Array的reduce()
方法获取总和:
var arrayOfValues = $('.section input[type=radio]').map(function(index, input) {
return parseInt($(input).val());
}).toArray();
var sum = arrayOfValues.reduce(function(val1, val2) {
return val1 + val2;
});