【问题标题】:jQuery checkbox and select - sum the values and add in varjQuery 复选框和选择 - 对值求和并添加到 var
【发布时间】:2012-08-17 11:51:58
【问题描述】:

解释在代码下方:

HTML 的代码是:

<div id="container"><h1>Add-ons</h1>
<input type="checkbox" name="ch1" value="10" id="qr1" />Add-on Number 1 - 10 QR <br />
<input type="checkbox" name="ch1" value="20" id="qr1" />Add-on Number 2 - 20 QR <br />
<input type="checkbox" name="ch1" value="40" id="qr1" />Add-on Number 3 - 40 QR <br />
<input type="checkbox" name="ch1" value="60" id="qr1" />Add-on Number 4 - 60 QR <br />
</div>

<div> I want more add-ons
<select id="more" name="more">
    <option value="0 QR">0</option>
    <option value="30 QR">1</option>
    <option value="50 QR">2</option>
    <option value="100 QR">3</option>
</select>
<span id="span"></span>
 User total usage: <span id="usertotal"> </span>

jQuery:

//For select          

function displayVals() {
  var singleValues = $("#more").val();         
  $("#span").html("<b>more addons:</b> " + 
    singleValues);
}

$("select").change(displayVals);
displayVals();

//For  checkboxes
var $cbs = $('input[name="ch1"]');
$cbs.click(function() {
  var total = 0;
  $cbs.each(function() {
    if (this.checked)
      var singleValues = $("#more").val();
      total += +this.value + singleValues;
  });
  $("#usertotal").text(total);
});

我希望用户总使用量:创建复选框的总和并添加选项的值,这样如果我选择复选框 1 和 2 加上选项 1,我将写入用户总使用量:60。

【问题讨论】:

  • 不要忘记遵循我们给您的建议yesterday:更改您的元素 id 属性,使它们都独一无二。

标签: javascript jquery html select checkbox


【解决方案1】:

我已经为您的代码创建了一个 fiddle

希望这是你想要的。

HTML:

<div id="container"><h1>Add-ons</h1>
<input type="checkbox" name="ch1" value="10" id="qr1" />Add-on Number 1 - 10 QR <br />
<input type="checkbox" name="ch1" value="20" id="qr1" />Add-on Number 2 - 20 QR <br />
<input type="checkbox" name="ch1" value="40" id="qr1" />Add-on Number 3 - 40 QR <br />
<input type="checkbox" name="ch1" value="60" id="qr1" />Add-on Number 4 - 60 QR <br />
</div>

<div> I want more add-ons
<select id="more" name="more">
    <option value="0">0</option>
    <option value="30">1</option>
    <option value="50">2</option>
    <option value="100">3</option>
</select>
<span id="span"></span>
 User total usage: <span id="usertotal"> </span>

Javascript:

function displayVals() {
      calcUsage();
      var singleValues = $("#more").val();         
      $("#span").html("<b>more addons:</b> " + 
                  singleValues + ' QR');
}
var $cbs = $('input[name="ch1"]');
function calcUsage() {
    var total = $("#more").val();
    $cbs.each(function() {
        if (this.checked)
            total = parseInt(total) + parseInt(this.value);
    });
    $("#usertotal").text(total + ' QR');
}

    $("select").change(displayVals);
    displayVals();
//For  checkboxes

$cbs.click(calcUsage);

【讨论】:

    【解决方案2】:

    这是你的答案

    Working Demo

      $('input:checkbox').change(function(){
    var tot=0;
    $('input:checkbox:checked').each(function(){
    tot+=parseInt($(this).val());
    });
     tot+=parseInt($('#more').val());
    $('#usertotal').html(tot)
    });
    
     $('#more').change(function(){
      $('input:checkbox').trigger('change');
     });
    

    【讨论】:

    • 这对我来说效果最好,因为我不仅有多个复选框,而且还有多个下拉菜单。这很容易计算一切。
    【解决方案3】:

    试试这个

    $("select").change(function() {
        $('input[name="ch1"]').change(); // trigger change to recalculate
    });
    $('input[name="ch1"]').change(function() {
        var singleValues = 0;
        $('input[name="ch1"]:checked').each(function() { // loop through checked inputs
            singleValues = +this.value + singleValues;
        });
        singleValues += (+$('#more').val().replace('QR', '').trim());  // add drop down to checked inputs
        $("#usertotal").text(singleValues);
    });​
    

    http://jsfiddle.net/wirey00/5s8qr/

    【讨论】:

      【解决方案4】:

      我相信您只是在each 函数中为您的if 语句丢失了一个块:您不想增加total,除非this.checked 为真。此外,您希望将 所有 字符串转换为数字,这样您就不会从 + 获得字符串连接 - 我使用过 parseInt。另外,根据您的描述,您似乎只想添加来自option 一次 的值,而不是每次都通过循环,因此使用它来初始化total

      $cbs.click(function()
      {
          var total = parseInt($("#more").val());
      
          $cbs.each(function()
          {
              if (this.checked)
                  total += parseInt(this.value);
          });
      
          $("#usertotal").text(total);
      });
      

      但是您还想在select 更改时进行此计算和更新,因此您应该将此循环拉出到一个单独的函数中并使用click 调用它:

      function calculateTotal()
      {
          var total = parseInt($("#more").val());
      
          $cbs.each(function()
          {
              if (this.checked)
                  total += parseInt(this.value);
          });
      
          $("#usertotal").text(total);
      }
      
      $("#more").change(calculateTotal);
      $cbs.click(calculateTotal);
      

      【讨论】:

      • 从 OP 的描述来看,他或她并不想在每次循环迭代时添加 singleValues,只需将其添加到总数中一次。 (因此您可以初始化 var total = +$("#more").val(); 并完全删除 singleValues 变量...)
      【解决方案5】:

      我已经为上述查询完成了完整的垃圾箱。这里也是演示链接。

      演示: http://codebins.com/bin/4ldqp85

      HTML

      <div id="container">
        <h1>
          Add-ons
        </h1>
        <input type="checkbox" name="ch1" value="10" id="qr1" />
        Add-on Number 1 - 10 QR 
        <br />
        <input type="checkbox" name="ch1" value="20" id="qr1" />
        Add-on Number 2 - 20 QR 
        <br />
        <input type="checkbox" name="ch1" value="40" id="qr1" />
        Add-on Number 3 - 40 QR 
        <br />
        <input type="checkbox" name="ch1" value="60" id="qr1" />
        Add-on Number 4 - 60 QR 
        <br />
      </div>
      <div>
        I want more add-ons
        <select id="more" name="more">
          <option value="0 QR">
            0
          </option>
          <option value="30 QR">
            1
          </option>
          <option value="50 QR">
            2
          </option>
          <option value="100 QR">
            3
          </option>
        </select>
        <span id="span">
        </span>
        User total usage: 
        <span id="usertotal">
      
        </span>
      </div>
      

      JQuery

      $(function() {
          $('input[name="ch1"]:checkbox').change(function() {
              var total = 0;
              $('input[name="ch1"]:checked').each(function() {
                  total += parseInt($(this).val());
              });
              total += parseInt($('#more').val());
              $('#usertotal').html(total);
          });
          $('#more').change(function() {
              var selectVal = $(this).val().trim();
              if (parseInt(selectVal) > 0) {
                  $("#span").html("<b>more addons:</b> " + selectVal);
              } else {
                  $("#span").html("");
              }
              $('input[name="ch1"]:checkbox').trigger('change');
          });
      });
      

      演示: http://codebins.com/bin/4ldqp85

      【讨论】:

        【解决方案6】:

        JsFiddle

        HTML:

        <div id="container"><h1>Add-ons</h1>
        <input type="checkbox" name="ch1" value="10" id="qr1" />Add-on Number 1 - 10 QR <br />
        <input type="checkbox" name="ch1" value="20" id="qr1" />Add-on Number 2 - 20 QR <br />
        <input type="checkbox" name="ch1" value="40" id="qr1" />Add-on Number 3 - 40 QR <br />
        <input type="checkbox" name="ch1" value="60" id="qr1" />Add-on Number 4 - 60 QR <br />
        </div>
        
        <div> I want more add-ons
        <select id="more" name="more">
            <option value="0">0</option>
            <option value="30">1</option>
            <option value="50">2</option>
            <option value="100">3</option>
        </select>
        <span id="span"></span>
         User total usage: <span id="usertotal"> </span>
        

        Javascript:

        function displayVals() {
              calcUsage();
              var singleValues = $("#more").val();         
              $("#span").html("<b>more addons:</b> " + 
                          singleValues + ' QR');
        }
        var $cbs = $('input[name="ch1"]');
        function calcUsage() {
            var total = $("#more").val();
            $cbs.each(function() {
                if (this.checked)
                    total = parseInt(total) + parseInt(this.value);
            });
            $("#usertotal").text(total + ' QR');
        }
        
            $("select").change(displayVals);
            displayVals();
        //For  checkboxes
        
        $cbs.click(calcUsage);
        

        【讨论】:

          猜你喜欢
          • 2013-09-06
          • 1970-01-01
          • 1970-01-01
          • 2018-04-17
          • 1970-01-01
          • 1970-01-01
          • 2016-06-23
          • 1970-01-01
          • 2015-11-08
          相关资源
          最近更新 更多