我使用javascript / jquery不好,所以这是一个愚蠢的问题! 我编码了这个
<li>
<a href="http://www.mazzodifiori.it/fiori/P15-Ficus.jpg"><img src="http://www.mazzodifiori.it/fiori/P15-Ficus.jpg" width=50 height=50 /></a>
<br><input name="p1" value="p1" prezzo="5" type="checkbox" />
<br><label>Pianta €</label><span class="price">5</span>
</li>
<li>
<a href="http://www.mazzodifiori.it/fiori/P15-Ficus.jpg"><img src="http://www.mazzodifiori.it/fiori/P15-Ficus.jpg" width=50 height=50 /></a>
<br><input name="p2" value="p2" prezzo="3" type="checkbox" />
<br><label>Pianta €</label><span class="price">3</span>
</li>
var checkValues = $('input[type=checkbox]:checked').map(function() {
return $(this).attr('prezzo');
}).get();
for(var i=0;i<checkValues.length;i++) {
var tot = tot + checkValues[i];
alert(tot);
}
这样,checkvalues包含数组。因此,检查该复选框,例如,在浏览器上显示2警告:
undefined5
和
undefined53
就像javascript连接数字一样,它们就像字符串一样!
我该如何解决这个问题?
答案 0 :(得分:3)
尝试改变:
var tot = tot + checkValues[i];
到此:
var tot = tot + +checkValues[i];
或强>
改变这个:
return $(this).attr('prezzo');
到此:
return +$(this).attr('prezzo');
这会将字符串强制转换为数字
答案 1 :(得分:1)
你继续重新初始化tot(严格来说这不是JS中的一个问题,但它的形式很糟糕),而且你最初将它初始化为未定义的,因为你正在定义它本身。在循环之前将其初始化为0.
答案 2 :(得分:1)
检查出来:
var tot = 0;
for(var i=0;i<checkValues.length;i++) {
tot = tot + parseInt(checkValues[i]);
alert(tot);
}
答案 3 :(得分:1)
Javascript是一种鸭子类型(松散类型)语言。如果它认为它们是字符串,它就会将它们连接起来。尝试强制它们进入您需要的数据类型。如果它们是整数,请使用parseInt(varName)+ parseInt(varName2)。