2017-10-14 53 views
0

我需要计算值total,它是初始值(比方说10)和因子A,B,C和D的乘积,它们等于,比方说2,3,4和5.jQuery - 通过将其乘以复选框值来计算该值

这些因素的组合应该由用户通过选中相应的框来选择。问题是我需要在表单中独立重复这么多次,下面的解决方案(对于这些部分中的两个)不能正确分离该过程。如果这些是文本值,我会做例如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>

回答

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>

+0

完美!谢谢!有没有办法从一开始就在结果字段中添加10个? –

+0

是的,您可以通过将'value'属性添加到'.result'输入(比如'value =“10”'')来作为初始值。检查更新的答案。 – curveball

+0

我可以从此属性读取总数的初始值吗?现在它总是需要10个参赛作品。 –

1

$(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>

+1

感谢您的快速建议,但版本中的第二个结果受第一个结果的影响。如果我在第一次检查中检查A,我会得到20,在第二个--40。 –