简体   繁体   English

如何添加复选框选中的计数值

[英]How to add check box checked count value

i need to add the total number of check box checked count value in element. 我需要在元素中添加复选框选中计数值的总数。

But when i checked the check box in "heading 2" part , the count value was added in "heading 1" part . 但是,当我选中“标题2”部分中的复选框时,计数值已添加到“标题1”部分中。

I did not find the issue any one please guide me resolve this issue 我没有发现任何问题,请引导我解决此问题

DEMO 演示

HTMl: HTMl:

    <div id="main">


    <div class="a">
                <div class="row">
                  <div class="col-md-12 cb_select_head">
                    <a data-parent="#accordion" data-toggle="collapse" href="#function-collapse"><span class=
                                    "glyphicon ecm-caret-down"></span></a><span class="labelBlock labelCounter">
                                    <span class="count-checked-checkboxes">0</span></span>
                    <span class="fb_options_head">heading 1</span>
                  </div>
                  <ul class="sidebar fb-list-option collapse in" id="function-collapse">
                    <li><a href="" data-toggle="collapse" data-target="#Actuarial-collapse"><span class="glyphicon ecm-caret-right"></span></a>
                      <input id="c1" name="cc" type="checkbox">
                      <label for="c1">asdas</label>

                    </li>
                    <li class="noArrow">
                      <input id="c2" name="cc" type="checkbox">
                      <label for="c2">asdasd</label>
                    </li>
                    <li><a href="" data-toggle="collapse"><span class="glyphicon ecm-caret-right"></span></a>
                      <input id="c3" name="cc" type="checkbox">
                      <label for="c3">asdasd
                      </label>

                      <ul>
                                    <li><input id="c1" name="cc" type="checkbox"><label for="c1">asd 1</label></li>
                                    <li><input id="c1" name="cc" type="checkbox"><label for="c1">sadas 2</label></li>
                                    <li><input id="c1" name="cc" type="checkbox"><label for="c1">asdas 3</label></li>
                                    </ul>
                    </li>
                    <li><a href="" data-toggle="collapse"><span class="glyphicon ecm-caret-right"></span></a>
                      <input id="c4" name="cc" type="checkbox">
                      <label for="c4">asdasd</label>
                    </li>
                    <li class="noArrow">
                      <input id="c5" name="cc" type="checkbox">
                      <label for="c5">five</label>
                    </li>
                  </ul>
                </div>
              </div>
          <!--First List End-->

          <!--Second list start -->

             <div class="a">
                <div class="row">
                  <div class="col-md-12 cb_select_head">
                    <a data-parent="#accordion" data-toggle="collapse" href="#function-collapse"><span class=
                                    "glyphicon ecm-caret-down"></span></a><span class="labelBlock labelCounter">
                                    <span class="count-checked-checkboxes">0</span></span>
                    <span class="fb_options_head">heading 2</span>
                  </div>
                  <ul class="sidebar fb-list-option collapse in" id="function-collapse">
                    <li><a href="" data-toggle="collapse" data-target="#Actuarial-collapse"><span class="glyphicon ecm-caret-right"></span></a>
                      <input id="c1" name="cc" type="checkbox">
                      <label for="c1">asdas</label>

                    </li>
                    <li class="noArrow">
                      <input id="c2" name="cc" type="checkbox">
                      <label for="c2">asdasd</label>
                    </li>
                    <li><a href="" data-toggle="collapse"><span class="glyphicon ecm-caret-right"></span></a>
                      <input id="c3" name="cc" type="checkbox">
                      <label for="c3">asdasd
                      </label>

                      <ul>
                                    <li><input id="c1" name="cc" type="checkbox"><label for="c1">asd 1</label></li>
                                    <li><input id="c1" name="cc" type="checkbox"><label for="c1">sadas 2</label></li>
                                    <li><input id="c1" name="cc" type="checkbox"><label for="c1">asdas 3</label></li>
                                    </ul>
                    </li>
                    <li><a href="" data-toggle="collapse"><span class="glyphicon ecm-caret-right"></span></a>
                      <input id="c4" name="cc" type="checkbox">
                      <label for="c4">asdasd</label>
                    </li>
                    <li class="noArrow">
                      <input id="c5" name="cc" type="checkbox">
                      <label for="c5">five</label>
                    </li>
                  </ul>
                </div>
              </div>  


 </div>

JS: JS:

$(document).ready(function() {
    var $checkboxes = $(
        '#main ul input[type="checkbox"]');
    $checkboxes.change(function() {
        var countCheckedCheckboxes = $checkboxes.filter(
            ':checked').length;
        $('.count-checked-checkboxes').text(
            countCheckedCheckboxes);
        $('#edit-count-checked-checkboxes').val(
            countCheckedCheckboxes);
    });
});

see the working solution. 看到有效的解决方案。 Remember IDs needs to be unique, and avoid use of IDs whenever possible like putting input element inside the label instead of using with Id 请记住,ID必须是唯一的,并尽可能避免使用ID,例如将输入元素放在标签中而不是与ID一起使用。

 $(document).ready(function() { var $checkboxes1 = $('#head1 ul input[type="checkbox"]'); var $checkboxes2 = $('#head2 ul input[type="checkbox"]'); $checkboxes1.change(function() { var countCheckedCheckboxes = $checkboxes1.filter(':checked').length; $('#head1 .count-checked-checkboxes').text(countCheckedCheckboxes); }); $checkboxes2.change(function() { var countCheckedCheckboxes = $checkboxes2.filter(':checked').length; $('#head2 .count-checked-checkboxes').text(countCheckedCheckboxes); }); }); 
 <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> <div id="main"> <div id="head1"> <div class="row"> <div class="col-md-12 cb_select_head"> <span class="count-checked-checkboxes">0</span> <span class="fb_options_head">heading 1</span> </div> <ul class="sidebar fb-list-option collapse in"> <li> <label> <input name="cc" type="checkbox">One </label> </li> <li class="noArrow"> <label> <input name="cc" type="checkbox">Two </label> </li> <li> <ul> <li> <label> <input name="cc" type="checkbox">3 - a </label> </li> <li> <label> <input name="cc" type="checkbox">3 -b </label> </li> <li> <label> <input name="cc" type="checkbox">2 - c </label> </li> </ul> </li> <li> <label> <input name="cc" type="checkbox">four </label> </li> <li class="noArrow"> <label> <input name="cc" type="checkbox">five </label> </li> </ul> </div> </div> <!--First List End--> <!--Second list start --> <div class="a" id="head2"> <div class="row"> <div class="col-md-12 cb_select_head"> <span class="count-checked-checkboxes">0</span> <span class="fb_options_head">heading 1</span> </div> <ul class="sidebar fb-list-option collapse in"> <li> <label> <input name="cc" type="checkbox">One </label> </li> <li class="noArrow"> <label> <input name="cc" type="checkbox">Two </label> </li> <li> <ul> <li> <label> <input name="cc" type="checkbox">3 - a </label> </li> <li> <label> <input name="cc" type="checkbox">3 - b </label> </li> <li> <label> <input name="cc" type="checkbox">2 - c </label> </li> </ul> </li> <li> <label> <input name="cc" type="checkbox">four </label> </li> <li class="noArrow"> <label> <input name="cc" type="checkbox">five </label> </li> </ul> </div> </div> </div> 

See if this works . 看看是否可行

Ignoring everything others have mentioned, about ID's needing to be unique and what not, I was able to tally checked boxes for each heading using DOM traversal. 忽略其他人提到的所有内容,关于ID的唯一性和非唯一性,我能够使用DOM遍历对每个标题的复选框进行计数。

I changed the jQuery to: 我将jQuery更改为:

$(document).ready(function() {
    $('.a').each(function(){
        var $checkboxes = $(this).find('input[type="checkbox"]');
        $checkboxes.change(function() {
           var countCheckedCheckboxes = $checkboxes.filter(':checked').length;
        $(this).closest('.a').find('.count-checked-checkboxes').text(
            countCheckedCheckboxes);
        });
    });
});
  1. Loop through each element '.a' 遍历每个元素“ .a”
  2. Use $(this).find('input[type="checkbox"]'); 使用$(this).find('input [type =“ checkbox”]'); to get just the relevant checkboxes 以获得相关的复选框
  3. On change, traverse up the DOM until you find '.a', from there you can traverse down and find the heading class '.count-checked-checkboxes' 更改后,向上遍历DOM,直到找到“ .a”,然后从那里向下遍历并找到标题类“ .count-checked-checkboxes”

There's probably a better way to do this though. 不过,可能有更好的方法。

.closest() starts at the current element and travels upwards looking for a match. .closest()从当前元素开始,然后向上移动以查找匹配项。

.find() travels downwards through descendants. .find()向下穿越后代。

Couple things. 夫妻的事。

j08691 is right, IDs must be unique. j08691是正确的,ID必须是唯一的。 The browser is getting the first #count-checked-checkboxes and filling that value. 浏览器将获得第一个#count-checked-checkboxes并填充该值。

Also, you are getting the count for all checkboxes which is going to tally all checkboxes regardless of which div they are in 另外,您将获得所有复选框的计数,这将汇总所有复选框,无论它们位于哪个div

I would suggest the following: 我建议以下内容:

$(document).ready(function() {
    var $checkboxes = $(
        '.a ul input[type="checkbox"]');
    $checkboxes.change(function() {
        var countCheckedCheckboxes = $checkboxes.filter(
            ':checked').length;
        $('#count-checked-checkboxes-a').text(
            countCheckedCheckboxes);
        $('#edit-count-checked-checkboxes-a').val(
            countCheckedCheckboxes);
    });
});

But you are still getting all checkboxes. 但是您仍然得到所有复选框。 At which point I would change your second <div class="a"> to <div class="b"> and then duplicate the above statement like so: 此时,我将把第二个<div class="a">更改为<div class="b"> ,然后像上面这样复制上面的语句:

$(document).ready(function() {
    var $checkboxes = $(
        '.b ul input[type="checkbox"]');
    $checkboxes.change(function() {
        var countCheckedCheckboxes = $checkboxes.filter(
            ':checked').length;
        $('#count-checked-checkboxes-b').text(
            countCheckedCheckboxes);
        $('#edit-count-checked-checkboxes-b').val(
            countCheckedCheckboxes);
    });
});

And of course change your IDs to match the ones in the jquery. 当然,更改您的ID以匹配jquery中的ID。

https://jsfiddle.net/gqcgwjq2/28/ https://jsfiddle.net/gqcgwjq2/28/

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM