【问题标题】:jQuery - Calculate the value by multiplying it by the checkbox valuesjQuery - 通过将值乘以复选框值来计算值
【发布时间】:2017-10-14 21:21:41
【问题描述】:

我需要计算值total,它是初始值(比如 10)和因子 A、B、C 和 D 的乘积,它们等于,比如 2、3、4 和 5 .

用户应通过选中相应的框来选择因素的组合。问题是我需要在一个表单中独立地重复多次,而下面的解决方案(对于其中两个部分)没有正确分离这个过程。如果这些是文本值,我会做例如var $text = $(".result", $section);

基本上,我不明白如何将数值变量与这些部分相关联。此外,即使没有选中任何框,也可以在 Result 字段中使用此初始值 (10)。

$(document).ready(function() {        
    $(".factor-checkbox").click(function(event) {
        var $section = $(this).closest(".section");
        var total = 10;
        $(".factor-checkbox:checked").each(function() {
            total *= parseInt($(this).val());
        });
        
            $('.result').val(total);
        
    });
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class="section">
    <label><input type="checkbox" name="A" value="2" class="factor-checkbox">A</label>
    <label><input type="checkbox" name="B" value="3" class="factor-checkbox">B</label>
    <label><input type="checkbox" name="C" value="4" class="factor-checkbox">C</label>
    <label><input type="checkbox" name="D" value="5" class="factor-checkbox">D</label>

    <label>Result <input type="text" class="result"></label>
    
</div>

<div class="section">
    <label><input type="checkbox" name="A" value="2" class="factor-checkbox">A</label>
    <label><input type="checkbox" name="B" value="3" class="factor-checkbox">B</label>
    <label><input type="checkbox" name="C" value="4" class="factor-checkbox">C</label>
    <label><input type="checkbox" name="D" value="5" class="factor-checkbox">D</label>

    <label>Result <input type="text" class="result"></label>
    
</div>

【问题讨论】:

    标签: javascript jquery html cakephp-3.0


    【解决方案1】:

    我假设您希望行是独立的:

    $(document).ready(function() {        
        $(".factor-checkbox").click(function(event) {
            var $section = $(this).closest(".section"),
                initial = parseInt($section.find('.result').data('initial')),
                total = initial;
            $section.find("input:checked").each(function() {
                total *= parseInt($(this).val());
            });
            $section.find('.result').val(total === initial ? initial : total);
            
        });
        // getting the total values
        $(".res_button").click(function() {
            var $section = $(this).closest(".section");
            var total = $section.find('.result').val();
            console.log(total);
        });
    });
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
    <div class="section">
        <label><input type="checkbox" name="A" value="2" class="factor-checkbox">A</label>
        <label><input type="checkbox" name="B" value="3" class="factor-checkbox">B</label>
        <label><input type="checkbox" name="C" value="4" class="factor-checkbox">C</label>
        <label><input type="checkbox" name="D" value="5" class="factor-checkbox">D</label>
    
        <label>Result <input type="text" data-initial="10" value="10" class="result"></label>
        
        <label><button class="res_button">Result 1 line</button></label>
    </div>
    
    <div class="section">
        <label><input type="checkbox" name="A" value="2" class="factor-checkbox">A</label>
        <label><input type="checkbox" name="B" value="3" class="factor-checkbox">B</label>
        <label><input type="checkbox" name="C" value="4" class="factor-checkbox">C</label>
        <label><input type="checkbox" name="D" value="5" class="factor-checkbox">D</label>
    
        <label>Result <input type="text" data-initial="20" value="20" class="result"></label>
    
        <label><button class="res_button">Result 2 line</button></label>
    </div>

    【讨论】:

    • 完美!谢谢!有没有办法让 Result 字段一开始就有 10 个?
    • 是的,您可以通过将value 属性添加到.result 输入(如value="10")将其作为初始值。检查更新的答案。
    • 我可以从这个属性中读取total的初始值吗?现在所有条目总是需要 10。
    • @Vincent Vega 当然,您可以随时读取该属性的值。我更新了我的答案。
    • 我想我明白了。问题是“10”是硬编码的。相反,您需要在附加属性“data-initial”中保留初始值,如果没有选中复选框,则将该字段设置为其初始值。检查更新的答案。
    【解决方案2】:

    $(document).ready(function() {        
        $(".factor-checkbox").click(function() {
           var $section= $(this).closest(".section")
            var total = 10;
            $section.find(".factor-checkbox:checked").each(function() {
                total *= parseInt($(this).val());
            });
            $section.find(".result").val(total);
        });
    });
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
    <div class="section">
        <label><input type="checkbox" name="A" value="2" class="factor-checkbox">A</label>
        <label><input type="checkbox" name="B" value="3" class="factor-checkbox">B</label>
        <label><input type="checkbox" name="C" value="4" class="factor-checkbox">C</label>
        <label><input type="checkbox" name="D" value="5" class="factor-checkbox">D</label>
    
        <label>Result <input type="text" value="10" class="result"></label>
        
    </div>
    
    <div class="section">
        <label><input type="checkbox" name="A" value="2" class="factor-checkbox">A</label>
        <label><input type="checkbox" name="B" value="3" class="factor-checkbox">B</label>
        <label><input type="checkbox" name="C" value="4" class="factor-checkbox">C</label>
        <label><input type="checkbox" name="D" value="5" class="factor-checkbox">D</label>
    
        <label>Result <input type="text" value="10" class="result"></label>
        
    </div>

    【讨论】:

    • 感谢您的快速建议,但您版本中的第二个结果受第一个影响。如果我在第一个 raw 中检查 A,我将得到 20,在第二个 - 40。
    猜你喜欢
    • 2011-07-01
    • 1970-01-01
    • 1970-01-01
    • 2013-02-20
    • 1970-01-01
    • 1970-01-01
    • 2012-01-20
    • 1970-01-01
    • 2021-10-07
    相关资源
    最近更新 更多