【问题标题】:Javascript does not sum numbersJavascript不会对数字求和
【发布时间】:2014-06-11 23:02:44
【问题描述】:

我不擅长使用 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 &euro;</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 &euro;</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);
}

以这种方式检查值包含数字数组。因此,例如检查 2 个复选框,在浏览器上会出现 2 个警报:

undefined5

undefined53

如果 javascript 像字符串一样连接数字!

我该如何解决这个问题?

【问题讨论】:

  • var tot = tot + checkValues[i]; - 右侧的tot 未初始化。因此结果。将声明放在循环之外var tot=0;
  • 为什么你认为checkValues 包含一个数字数组?您是否阅读过.attr() 的文档?它总是返回一个字符串(或undefined)。
  • 观看此异常无法读取 null 的属性 'map',似乎问题在于 map 函数从复选框接收 null 或未定义的值
  • 你应该把这个for(var i=0;i&lt;checkValues.length;i++) { var tot = tot + checkValues[i]; alert(tot); }改成这个:var i,tot=0; for(i=0;i&lt;checkValues.length;i++) { tot = tot + +checkValues[i]; alert(tot); }。 Javascript 没有块作用域——所以如果你把它写在for 块之外就不会那么混乱了。此外,您应该将tot 初始化为零,因为在第一次迭代中tot 的值是undefined

标签: javascript jquery string sum


【解决方案1】:

尝试改变:

var tot = tot + checkValues[i];

到这里:

var tot = tot + +checkValues[i];

改变这个:
return $(this).attr('prezzo');

到这里:

return +$(this).attr('prezzo');

这会将字符串强制转换为数字

【讨论】:

    【解决方案2】:

    看看这个:

    var tot = 0;
    for(var i=0;i<checkValues.length;i++) {
        tot = tot + parseInt(checkValues[i]);
        alert(tot);
    }
    

    【讨论】:

    • 我按照你的“tot = tot + parseInt(checkValues[i]);”修复它以及给我的建议!我很高兴我解决了我的问题!!谢谢 :DDD PS=我尝试使用 parseInt 但它不起作用......也许我做错了!
    • @GiacomoCerquone 或者,您可以使用for(var i=0, tot=0;i&lt;checkValues.length;i++) {
    【解决方案3】:

    您不断地重新初始化 tot(严格来说这在 JS 中不是问题,但它是一种糟糕的形式),而且您最初将其初始化为 undefined,因为您将其定义为自身。在循环之前将其初始化为0。

    【讨论】:

    • 虽然这修复了undefined 问题,但它仍然会进行字符串连接,而不是添加
    • 这是我的一个错误。谢谢,我正在修复它:)
    【解决方案4】:

    Javascript 是一种鸭子类型(松散类型)语言。如果它认为它们是字符串,它将连接它们。尝试将它们强制转换为您需要的数据类型。如果它们是整数,请使用 parseInt(varName) + parseInt(varName2)。

    http://www.w3schools.com/jsref/jsref_parseint.asp

    【讨论】:

    • 如果其中一个变量是“未定义的”,则 parseInt 将无法解析它,因为 undefined 不是数字。在解析之前使用 IsNaN(var1) 检查您的值是否为数字。
    猜你喜欢
    • 1970-01-01
    • 2011-06-01
    • 2021-08-15
    • 2014-07-22
    • 1970-01-01
    • 2010-10-27
    • 1970-01-01
    • 1970-01-01
    • 2016-10-24
    相关资源
    最近更新 更多