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);
});

キャッチ?なぜ ?

回答:使用しない場合は、常に基数の原因を使用する必要があります。先行ゼロは8進数です。

 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 に答える