web-dev-qa-db-fra.com

jQuery somme des valeurs d'entrée dans les sections

J'essaie de trouver la somme des valeurs d'entrée dans plusieurs sections. J'ai mis mon code jusqu'ici en dessous.

Le 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>

Le jQuery:

$('.section').each(function(){
  var totalPoints = 0;
  $(this).find('input').each(function(){
    totalPoints += $(this).val();
  });
  alert(totalPoints);
});

Veuillez noter qu'il s'agit d'une version simplifiée du code que j'utilise réellement. Donc, je veux que ceci alerte 2 valeurs (la somme de chaque section): 8 puis 6. Je reçois plutôt une chaîne de toutes les valeurs. La première section alerte donc 0143.

Des idées comment je reçois une somme cumulative au lieu d'une chaîne?

18
Coop

Vous faites "1" + "1" et attendez-vous à ce que ce soit 2 (int)

ce n'est pas.

une solution très rapide (et pas entièrement correcte) est: 

$('.section').each(function(){
  var totalPoints = 0;
  $(this).find('input').each(function(){
    totalPoints += parseInt($(this).val()); //<==== a catch  in here !! read below
  });
  alert(totalPoints);
});

capture ? Pourquoi ?

réponse: Vous devriez toujours utiliser radix parce que sinon, un zéro non significatif est octal

 parseInt("010") //8 ( ff)
 parseInt("010") //10 ( chrome)


 parseInt("010",10) //10 ( ff)
 parseInt("010",10) //10 ( chrome)

bien .... vous avez l'idée. fournir radix!

modifier

solution finale (en utilisant .each( function(index, Element) ))

$('.section').each(function(){
      var totalPoints = 0;
      $(this).find('input').each(function(i,n){
        totalPoints += parseInt($(n).val(),10); 
      });
      alert(totalPoints);
    });
32
Royi Namir

Utilisez parseFloat () ou parseInt ()

var totalPoints = 0;
$('.section input').each(function(){
        totalPoints = parseFloat($(this).val()) + totalPoints;
});
alert(totalPoints);
6
Doguhan Okumus

La valeur étant stockée sous forme de chaîne, l'appel de += consiste à effectuer une concaténation de chaîne. Vous voulez/avez besoin de le traiter comme un nombre, donc il fait l’addition. Utilisez la fonction parseInt() pour le convertir en nombre:

totalPoints += parseInt($(this).val(), 10);
4
Anthony Grist

La fonction javascript parseInt () devrait donner ce dont vous avez besoin, voici un violon: http://jsfiddle.net/k739M/

Et du code formaté:

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

    alert(totalPoints);
});​

De plus, si vous appelez $ (chaque) sur "Entrée de section", vous pouvez réduire le temps de traitement (et le code).

var totalPoints = 0;

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

alert(totalPoints);
0
RainbowFish
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
0
Mahak Choudhary