计算复选框上的总计

时间:2016-07-18 04:50:19

标签: javascript jquery logic

HTML

<div id="catlist">
    <input type="checkbox" id="cat_1" value="cat_1" price="1.5" /><label for="cat_1">cat_1</label><br/>
    <input type="checkbox" id="cat_2" value="cat_2" price="2" /><label for="cat_2">cat_2</label><br/>
    <input type="checkbox" id="cat_3" value="cat_3" price="3.5" /><label for="cat_3">cat_3</label><br/>
    <input type="checkbox" id="cat_4" value="cat_4" price="4" /><label for="cat_4">cat_4</label><br/>
    <input type="checkbox" id="cat_5" value="cat_5" price="5" /><label for="cat_5">cat_5</label><br/>
    <input type="checkbox" id="cat_6" value="cat_6" price="6.5" /><label for="cat_6">cat_6</label><br/>
    <input type="checkbox" id="cat_7" value="cat_7" price="7" /><label for="cat_7">cat_7</label><br/>
    <input type="checkbox" id="cat_8" value="cat_8" price="8" /><label for="cat_8">cat_8</label><br/>
    <input type="checkbox" id="cat_9" value="cat_9" price="9.5" /><label for="cat_9">cat_9</label>
</div>
<input type="text" id="total" value="0"  />

的Javascript

function calcAndShowTotal(){
    var total = 0;
    $('#catlist :checkbox[checked]').each(function(){
        total =+ parseFloat($(this).attr('price')) || 0;
    });
    $('#total').val(total);
}

$('#pricelist :checkbox').click(function(){
    calcAndShowTotal();
});

calcAndShowTotal();

我正在获得特别的价值。为什么?我尝试了总数,我试过jquery但没有成功..

3 个答案:

答案 0 :(得分:1)

  • 使用$('#catlist :checkbox:checked')选择器选择checked复选框
  • []用作attribute selector,可用作'[type="checkbox"]',但不会过滤checked复选框
  • +之前不需要
  • parseFloat运算符,它必须是total =+
  • 而不是调用处理程序,只需使用.change()
  • 调用更改处理程序

&#13;
&#13;
function calcAndShowTotal() {
  var total = 0;
  $('#catlist :checkbox:checked').each(function() {
    total += parseFloat($(this).attr('price')) || 0;
  });
  $('#total').val(total);
}

$('#catlist :checkbox').change(calcAndShowTotal).change();
&#13;
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.0/jquery.min.js"></script>
<div id="catlist">
  <input type="checkbox" id="cat_1" value="cat_1" price="1.5" />
  <label for="cat_1">cat_1</label>
  <br/>
  <input type="checkbox" id="cat_2" value="cat_2" price="2" />
  <label for="cat_2">cat_2</label>
  <br/>
  <input type="checkbox" id="cat_3" value="cat_3" price="3.5" />
  <label for="cat_3">cat_3</label>
  <br/>
  <input type="checkbox" id="cat_4" value="cat_4" price="4" />
  <label for="cat_4">cat_4</label>
  <br/>
  <input type="checkbox" id="cat_5" value="cat_5" price="5" />
  <label for="cat_5">cat_5</label>
  <br/>
  <input type="checkbox" id="cat_6" value="cat_6" price="6.5" />
  <label for="cat_6">cat_6</label>
  <br/>
  <input type="checkbox" id="cat_7" value="cat_7" price="7" />
  <label for="cat_7">cat_7</label>
  <br/>
  <input type="checkbox" id="cat_8" value="cat_8" price="8" />
  <label for="cat_8">cat_8</label>
  <br/>
  <input type="checkbox" id="cat_9" value="cat_9" price="9.5" />
  <label for="cat_9">cat_9</label>
</div>
<input type="text" id="total" value="0" />
&#13;
&#13;
&#13;

使用Array#reduce

&#13;
&#13;
function calcAndShowTotal() {
  var total = [].reduce.call($('#catlist :checkbox:checked'), function(a, b) {
    return a + +$(b).attr('price') || 0;
  }, 0);
  $('#total').val(total);
}

$('#catlist :checkbox').change(calcAndShowTotal).change();
&#13;
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.0/jquery.min.js"></script>
<div id="catlist">
  <input type="checkbox" id="cat_1" value="cat_1" price="1.5" />
  <label for="cat_1">cat_1</label>
  <br/>
  <input type="checkbox" id="cat_2" value="cat_2" price="2" />
  <label for="cat_2">cat_2</label>
  <br/>
  <input type="checkbox" id="cat_3" value="cat_3" price="3.5" />
  <label for="cat_3">cat_3</label>
  <br/>
  <input type="checkbox" id="cat_4" value="cat_4" price="4" />
  <label for="cat_4">cat_4</label>
  <br/>
  <input type="checkbox" id="cat_5" value="cat_5" price="5" />
  <label for="cat_5">cat_5</label>
  <br/>
  <input type="checkbox" id="cat_6" value="cat_6" price="6.5" />
  <label for="cat_6">cat_6</label>
  <br/>
  <input type="checkbox" id="cat_7" value="cat_7" price="7" />
  <label for="cat_7">cat_7</label>
  <br/>
  <input type="checkbox" id="cat_8" value="cat_8" price="8" />
  <label for="cat_8">cat_8</label>
  <br/>
  <input type="checkbox" id="cat_9" value="cat_9" price="9.5" />
  <label for="cat_9">cat_9</label>
</div>
<input type="text" id="total" value="0" />
&#13;
&#13;
&#13;

答案 1 :(得分:1)

您可以使用change而不是循环来响应并更改复选框上的事件。您还需要像+=一样添加或减去值,以便在-=上添加减法

var _total = 0;
$('input[type="checkbox"]').change(function() {
  if($(this).is(':checked')){
  _total += parseFloat($(this).attr('price')) || 0;
  }
else{
  _total -= parseFloat($(this).attr('price')) || 0;
}
$('#total').val(_total);
})

JSFIDDLE

答案 2 :(得分:0)

$('input:checkbox').change(function(){
var totalprice=0;
$('input:checkbox:checked').each(function(){
totalprice+= parseFloat($(this).attr('price'));
});
$('#total').val(totalprice)
});