现在,在选中复选框后,它会添加分配的价格,但在取消选择时不会减去。 如何正确检查$('.amount') ,然后进行正确的数学计算?

我在这里摆弄一个小提琴以显示我正在使用什么。

$(':checkbox').change(function(){
    var amount = $('.amount').html();
    sum = Number(amount.replace(/[^0-9\.]+/g,""));
    var names = $(':checked').map(function(){
        sum += (this.value - 0);
        return this.name;
    }).get().join(',');
    $('span.amount').text('$' + sum);
    spans[1].innerHTML = sum;
});

===============>>#1 票数:3 已采纳

如何跟踪原始金额,然后始终从原始金额开始,如下所示:

var originalAmount = Number($('.amount').html().replace(/[^0-9\.]+/g,""));

$(':checkbox').change(function(){
    var sum = originalAmount;
    // The rest of the code stays the same.

更新了jsfiddle

编辑:我忘了指出我在“ sum”前面添加了“ var”,所以它是一个局部变量。

===============>>#2 票数:1

我不确定为什么每次都需要遍历所有复选框。
使用现有逻辑,您将继续添加已添加的金额。

在您当前的代码中,单击第一个复选框时,它会添加99.99按预期;但是单击第二个复选框后,它会添加199.98 99.99从第一再以及将99.99从第二,造成不正确的总数。

我认为您可以通过仅使用当前点击的值来简化此操作。 通过不重新评估已经处理的复选框,这也可以节省冗余,类似于:

$(':checkbox').change(function(){
    var sum = $('.amount').html();
    sum = Number(sum.replace(/[^0-9\.]+/g,""));

    if(this.checked){
        sum += Number(this.value);
    } else {
        sum -= Number(this.value);
    }

    $('span.amount').text('$' + sum);
    spans[1].innerHTML = sum;
});

演示 -每次点击使用单笔金额扣除/增加


===============>>#3 票数:0

可能很简单,希望对您有所帮助

Keep It Simple Silly

$(':checkbox').change(function(){
var amount = $('.amount').html();

amount = amount.substring(1);
var pre = parseFloat(amount); 

if ($(this).is(':checked')) {

   pre += parseFloat($(this).val()); 


} else {
    pre -= parseFloat($(this).val()); 
}
amount = pre; 


$('span.amount').text('$' + amount);
});

http://jsfiddle.net/XSCZ3/15/

我希望这可以帮助

  ask by Modelesq translate from so

未解决问题?本站智能推荐: