我们需要在元素中添加复选框检查计数值的总数。
但是当我们选中“标题2”部分中的复选框时,检查的计数值被添加到“标题1”部分。
我没有找到任何问题,请指导我解决这个问题
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:
$(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);
});
});
答案 0 :(得分:2)
尝试使用this
引用来查找选择器的上下文。我在这里使用closest(".row")
来查找上下文。之后,我们必须在找到的上下文中选中已选中的复选框并更新值。
$(document).ready(function() {
$(":checkbox").change(function() {
var closest = $(this).closest("div.row");
var countCheckedCheckboxes = $(":checkbox", closest).filter(':checked').length;
$('.count-checked-checkboxes', closest).text(countCheckedCheckboxes);
$('#edit-count-checked-checkboxes').val(countCheckedCheckboxes);
});
});
同样,Id在整个文档中必须是唯一的。但是在我们的上下文中,这并没有阻止你看到预期的结果。不要忘记,我总是必须是独一无二的。我在你的HTML中发现了2个不同的id。纠正它。
答案 1 :(得分:0)
这是一个更简单的版本。就像我在评论中提到的那样,您需要为ul
分配不同的ID(我只是将另一个ID命名为#function-collapse1
)
$(document).ready(function() {
$('#function-collapse li,#function-collapse1 li').on('change',function() // delegate a change event on li items in ul
{ $(this).closest('div.row').find('span.count-checked-checkboxes') // find the respective span element to display the count
.text($(this).closest('ul').find('li input:checkbox:checked').length);
});
});
答案 2 :(得分:0)
我为你拥有的每个ul创建了一个循环:
$(document).ready(function() {
$("#main ul").each(function() {
var $ul = $(this);
var $checkboxes = $ul.find('input[type="checkbox"]');
$checkboxes.change(function() {
var countCheckedCheckboxes = $checkboxes.filter(
':checked').length;
$ul.parent().find('.count-checked-checkboxes').text(
countCheckedCheckboxes);
$ul.parent().find('#edit-count-checked-checkboxes').val(
countCheckedCheckboxes);
});
});
});
答案 3 :(得分:0)
您需要做的就是使用此标准DOM方法调用:
document.querySelector("input[type=checkbox]:checked").length;
并且,要将搜索隔离到文档的特定部分,只需使用以下内容:
var part2 = document.querySelector("part2");
part2.querySelector("input[type=checkbox]:checked").length;