【问题标题】:Add up Checkbox Values and Write to Input Field添加复选框值并写入输入字段
【发布时间】:2015-12-16 14:40:26
【问题描述】:

我有一个带有一些复选框和 Javascript sn-p 的表单,其中复选框值被累加并写入 <span>。这很好用,但我真的希望它写入输入文本字段而不是 <span>

这是我表单的复选框部分:

<section id="extra-features">
<div class="checkbox">
<label><input type="checkbox" name="checkbox" id="outside" class="sum" value="10" data-toggle="checkbox"> Outside Wash</label>
</div><br/>
<div class="checkbox">
<label><input type="checkbox" name="checkbox" id="aclean" class="sum" value="39" data-toggle="checkbox"> A - Clean: Wash Vacuum, Windows, Wheels/Tires, Wax</label>
</div><br/>
<div class="checkbox">
<label><input type="checkbox" name="checkbox" id="bclean" class="sum" value="0" data-toggle="checkbox"> B - Clean: Same as A above <em>PLUS:</em> Shampoo Interior, Clean/Dress Interior Panels, Remove Bugs/Tar.</label>
</div><br/>
<div class="checkbox">
<label><input type="checkbox" name="checkbox" id="cclean" class="sum" value="109" data-toggle="checkbox"> C - Clean: Same as B above <em>PLUS:</em> Compound Polish Exterior, Clean/Dress Moldings as Needed.    </label>
</div>
</section>

这是 javascript 当前正在写入的 &lt;span&gt;

<span id="payment-total" style="text-decoration:underline;">0</span>

这里是javascript:

window.onload=function(){
var inputs = document.getElementsByClassName('sum'),
    total  = document.getElementById('payment-total');

 for (var i=0; i < inputs.length; i++) {
    inputs[i].onchange = function() {
        var add = this.value * (this.checked ? 1 : -1);
        total.innerHTML = parseFloat(total.innerHTML) + add
    }
  }
}

【问题讨论】:

    标签: javascript jquery html forms checkbox


    【解决方案1】:

    你不需要循环。使用 jQuery 的 change() 而不是 onchange。它有一个隐式循环。使用 jQuery 进行检查输入也比定制的 JS 更可靠。这是一个最小的工作示例:

    $(document).ready(function() {
        function updateSum() {
          var total = 0;
          $(".sum:checked").each(function(i, n) {total += parseInt($(n).val());})
          $("#total").val(total);
        }
        // run the update on every checkbox change and on startup
        $("input.sum").change(updateSum);
        updateSum();
    })
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
    
    <section id="extra-features">
    <div class="checkbox">
    <label><input type="checkbox" name="checkbox" id="outside" class="sum" value="10" data-toggle="checkbox"> Outside Wash</label>
    </div><br/>
    <div class="checkbox">
    <label><input type="checkbox" name="checkbox" id="aclean" class="sum" value="39" data-toggle="checkbox"> A - Clean: Wash Vacuum, Windows, Wheels/Tires, Wax</label>
    </div><br/>
    <div class="checkbox">
    <label><input type="checkbox" name="checkbox" id="bclean" class="sum" value="0" data-toggle="checkbox"> B - Clean: Same as A above <em>PLUS:</em> Shampoo Interior, Clean/Dress Interior Panels, Remove Bugs/Tar.</label>
    </div><br/>
    <div class="checkbox">
    <label><input type="checkbox" name="checkbox" id="cclean" class="sum" value="109" data-toggle="checkbox"> C - Clean: Same as B above <em>PLUS:</em> Compound Polish Exterior, Clean/Dress Moldings as Needed.    </label>
    </div>
    </section>
    <input type="text" id="total">

    工作样本:https://jsfiddle.net/3veu206r/

    【讨论】:

    • 请仔细阅读您的问题并更新答案。它现在将值相加,而不是简单地计算选中的复选框。
    【解决方案2】:

    使用您的代码:

    见:https://msdn.microsoft.com/en-us/library/ms535126(v=vs.85).aspx

    window.onload=function(){
    var inputs = document.getElementsByClassName('sum'),
        total  = document.getElementById('payment-total');
    
     for (var i=0; i < inputs.length; i++) {
        inputs[i].onchange = function() {
            var add = this.value * (this.checked ? 1 : -1);
            total.innerHTML = parseFloat(total.innerHTML) + add
            var new_total = parseFloat(document.getElementById('input').value);
          console.log(new_total);
            document.getElementById('input').value=new_total + add
        }
      }
    }
    <section id="extra-features">
    <div class="checkbox">
    <label><input type="checkbox" name="checkbox" id="outside" class="sum" value="10" data-toggle="checkbox"> Outside Wash</label>
    </div><br/>
    <div class="checkbox">
    <label><input type="checkbox" name="checkbox" id="aclean" class="sum" value="39" data-toggle="checkbox"> A - Clean: Wash Vacuum, Windows, Wheels/Tires, Wax</label>
    </div><br/>
    <div class="checkbox">
    <label><input type="checkbox" name="checkbox" id="bclean" class="sum" value="0" data-toggle="checkbox"> B - Clean: Same as A above <em>PLUS:</em> Shampoo Interior, Clean/Dress Interior Panels, Remove Bugs/Tar.</label>
    </div><br/>
    <div class="checkbox">
    <label><input type="checkbox" name="checkbox" id="cclean" class="sum" value="109" data-toggle="checkbox"> C - Clean: Same as B above <em>PLUS:</em> Compound Polish Exterior, Clean/Dress Moldings as Needed.    </label>
    </div>
    </section>
    This is the <span> that the javascript is writing to currently:
    
    <span id="payment-total" style="text-decoration:underline;">0</span>
    <input id="input" type="text" value="0"/>

    【讨论】:

    • 这也有效,我最终使用了下面的解决方案。谢谢,我赞成这个。
    【解决方案3】:

    你必须为 jQuery 做的事情

    $(total).val(parseFloat(total.innerHTML) + add);
    

    对于javascript

    total.value parseFloat(total.innerHTML) + add;
    

    【讨论】:

      猜你喜欢
      • 2014-05-21
      • 1970-01-01
      • 2018-09-30
      • 1970-01-01
      • 1970-01-01
      • 2013-04-24
      • 2015-12-04
      • 2019-03-25
      • 1970-01-01
      相关资源
      最近更新 更多