现在选择复选框后,它会添加指定的价格,但在取消选择时不会减去。如何正确检查$('.amount')
的数量,然后进行正确的数学运算?
我制作了fiddle here来展示我正在使用的内容。
$(':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;
});
答案 0 :(得分:3)
如何跟踪原始数量,然后始终以此开头,如下所示:
var originalAmount = Number($('.amount').html().replace(/[^0-9\.]+/g,""));
$(':checkbox').change(function(){
var sum = originalAmount;
// The rest of the code stays the same.
编辑:我忘了指出我在“sum”前添加了“var”,所以它是一个局部变量。
答案 1 :(得分: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;
});
DEMO - 使用单笔金额扣除/每次点击添加
答案 2 :(得分:0)
这可以很简单 我希望这可以帮助
KISS 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);
});
我希望这可以提供帮助