-1

これは私には奇妙です。ちょっとした構文エラーか何か。2 つの変数の値を加算して、3 番目の変数に追加するだけです。

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、入力が5checkedtotal等しい場合、代わりに が得られ05ます。


アップデート:

つまり、値は整数ではないため、追加されます。派手な文字列と整数の反転を行う代わりに、最初からデータ属性を整数として取得する方法はありますか?

ありがとう!

4

2 に答える 2

0

これらの変数がどこかで文字列としてキャストされている場合は、整数キャストが必要です。これが、結果が正しくない理由です。

そして、あなたはただすることができますtotal += parseInt(each);

于 2012-10-22T00:47:24.380 に答える
0

値の 1 つ (または両方) が文字列として割り当てられている必要があります。これが頻繁に発生する場合は、(強制的に)数値にキャストすることで回避できます。

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);
于 2012-10-22T00:49:13.093 に答える