【问题标题】:jQuery add totals of variablesjQuery添加变量的总数
【发布时间】:2012-10-22 00:43:41
【问题描述】:

这对我来说很奇怪。一些小的语法错误或其他东西。只需将两个变量的值相加并将它们附加到第三个变量。

var total = 0;

input.each(function(){

    var thiis = $(this),
        cost  = thiis.attr('data-cost');

    if (thiis.prop('checked')){

        total = total + cost;
    } else {

        total = total - cost;
    }
}

所以如果cost = 5 并且输入是checked 那么total 等于5。相反,我得到05


更新:

字是值不是整数,所以它们是附加的。不必做一些花哨的字符串整数翻转,有没有办法让我从一开始就将数据属性作为整数获取?

谢谢!

【问题讨论】:

  • 确定你没有total = '5' 或类似的东西吗?如果一个是字符串,它将连接而不是添加。
  • 这里返回 10 jsfiddle.net/j08691/gNZh9
  • 只需使用.data() 方法而不是.attr() - .data() 会尽一切努力正确地对值进行类型转换,而.attr() 只返回一个字符串。此外,您只需要使用.data('cost') 而不是.attr('data-cost')

标签: jquery variables add


【解决方案1】:

如果这些变量在某处被转换为字符串,则需要整数转换,这就是结果不正确的原因。

你可以这样做total += parseInt(each);

【讨论】:

    【解决方案2】:

    必须将其中一个(或两个)值分配为字符串。如果您经常看到这种情况,您可以通过(强制)转换为数字来避免它:

    function add(){
      var total = 0;
      for (var a = 0; a < arguments.length; a++){
        var n = new Number(arguments[a]);
        //console.log(arguments[a] + '=' + n);
        if (isNaN(n)){
          throw "Argument " + a + " is not a number.";
        }
        total += n;
      }
      return total;
    }
    
    add('1', 2, 3.5);
    

    这是解决实际问题的方法(如果这些是实际数字,您需要了解为什么它们是字符串),但这会得到您想要的结果:

    total = add(total,each);
    

    【讨论】:

    • 感谢您的彻底回答。使用反射,因为它是现有的方法
    • @technopeasant:使用new Number() 也是“现有的”。 (这是每个数字的来源)。请记住,parseInt 仅适用于整数。如果您的数字有小数,您需要使用parseFloat。而且,如果在任何时候total 是一个字符串,这都无关紧要。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-07-20
    • 1970-01-01
    • 2011-04-18
    • 2014-05-30
    • 1970-01-01
    相关资源
    最近更新 更多