【问题标题】:Calculate total on checkbox checked计算选中复选框的总数
【发布时间】:2016-07-18 04:50:19
【问题描述】:

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 但没有成功..

【问题讨论】:

  • #pricelist 在哪里?
  • 应该是 =+ 而不是 +=

标签: javascript jquery logic


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

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

$('#catlist :checkbox').change(calcAndShowTotal).change();
<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" />

使用Array#reduce

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();
<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" />

【讨论】:

    【解决方案2】:

    您可以使用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

    【讨论】:

      【解决方案3】:
      $('input:checkbox').change(function(){
      var totalprice=0;
      $('input:checkbox:checked').each(function(){
      totalprice+= parseFloat($(this).attr('price'));
      });
      $('#total').val(totalprice)
      });
      

      【讨论】:

      • 请编辑更多信息。不建议使用纯代码和“试试这个”的答案,因为它们不包含可搜索的内容,也没有解释为什么有人应该“试试这个”。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-30
      • 2011-07-01
      • 1970-01-01
      • 1970-01-01
      • 2012-06-10
      • 1970-01-01
      相关资源
      最近更新 更多