25

我试图在多个部分中找到输入值的总和。我已经把我的代码放在下面了。

的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。

任何想法如何获得累积总和而不是字符串?

4

6 回答 6

40

你正在做 "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);
    });
于 2013-01-03T15:35:54.340 回答
6

使用parseFloat()parseInt()

var totalPoints = 0;
$('.section input').each(function(){
        totalPoints = parseFloat($(this).val()) + totalPoints;
});
alert(totalPoints);
于 2013-01-03T15:44:42.877 回答
4

该值存储为字符串,因此调用+=正在执行字符串连接。你想/需要把它当作一个数字,所以它会加法。使用parseInt()函数将其转换为数字:

totalPoints += parseInt($(this).val(), 10);
于 2013-01-03T15:35:45.453 回答
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”上调用 $(each),则可以减少处理时间(和代码)。

var totalPoints = 0;

$('.section input').each(function(){
    totalPoints += parseInt($(this).val());
});

alert(totalPoints);
于 2013-01-03T15:42:28.347 回答
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
于 2018-09-13T05:27:34.660 回答
0

您还可以使用reduce()Array 的方法来获取总和:

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;
});
于 2020-09-28T06:08:03.347 回答