获取范围的当前值

时间:2013-04-17 22:04:46

标签: jquery

现在选择复选框后,它会添加指定的价格,但在取消选择时不会减去。如何正确检查$('.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;
});

3 个答案:

答案 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.

updated jsfiddle

编辑:我忘了指出我在“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);
});

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

我希望这可以提供帮助