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?
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!
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);
});
Utilisez parseFloat () ou parseInt ()
var totalPoints = 0;
$('.section input').each(function(){
totalPoints = parseFloat($(this).val()) + totalPoints;
});
alert(totalPoints);
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);
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);
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