gpt4 book ai didi

javascript - Jquery 复选框分组 - 当至少单击一个子复选框时取消选中父级,当选中所有子复选框时选中父级

转载 作者:行者123 更新时间:2023-11-28 01:54:49 24 4
gpt4 key购买 nike

我构建了一个表单,需要根据其父级动态检查输入复选框。到目前为止,我已经可以选择全部、不选择、单击父项时选择部分内的所有子项,以及再次单击该父项时选择部分内的所有子项。

我遇到的问题是,我希望子复选框在至少取消选择一个时取消选中父复选框。例如,我单击父级上的复选框,它会选择所有子复选框...然后我单击其中一个子级复选框以取消选择它,但我也希望父级复选框知道这一点,并在以下情况下取消选择: child 不受检查。

我还需要以另一种方式进行操作,因此如果我检查一个部分中的所有子项(而不是父级),则在检查最后一个子项(全部)后,父级将获得选定的状态。

对此的任何帮助将不胜感激,因为我发誓我正在为此掉头发!

JS fiddle 地址: http://jsfiddle.net/DprEu/1/

这是我的代码:

JS

jQuery(document).ready(function($) {
// checkbox functions
$('#selectAllButton').on('click', function () {
$('input[type="checkbox"]').prop('checked', true).closest('label').addClass('c_on');
$('#selectAllButton').addClass('c_on');
$('#selectNoneButton').removeClass('c_on');
});
$('#selectNoneButton').on('click', function () {
$('input[type="checkbox"]').prop('checked', false).closest('label').removeClass('c_on');
$('#selectNoneButton').addClass('c_on');
$('#selectAllButton').removeClass('c_on');
});

$('.section .section_label input').click(function () {
var chckClass = "";
if (!this.checked) {
chckClass = "";
} else {
chckClass = "c_on"
}
$(this).closest('.section').find('input[type="checkbox"]').not(this).prop('checked', this.checked).closest('label').removeClass("c_on").addClass(chckClass);
});
$('input[type="checkbox"]').on('click', function () {
var chckClass = "";
if (!this.checked) {
chckClass = "";
} else {
chckClass = "c_on"
}
$(this).closest('label').removeClass('c_on').addClass(chckClass);
});
});

HTML:

<div class="document">
<div class="section inline">
<label class="label_radio lightblue" id="selectAllButton" for="selectAll">
<input type="radio" name="masscheck" id="selectAll" />Select all</label>
</div>
<div class="section inline">
<label class="label_radio lightblue" id="selectNoneButton" for="selectNone">
<input type="radio" name="masscheck" id="selectNone" />Select none</label>
</div>
<div class="clear"></div>
</div>


<div class="document">
<div class="section">
<label class="label_check section_label blue" for="docs_1131">
<input type="checkbox" id="docs_1131" name="docs" value="1131" />Title page</label>
</div>
</div>

<div class="document">
<div class="section">
<label class="label_check section_label blue" for="docs_1118">
<input type="checkbox" id="docs_1118" name="docs" value="1118" />
Section 1
</label>

<blockquote>
<div class="subsection">
<label class="label_check sub_label lightblue" for="docs_1119">
<input type="checkbox" id="docs_1119" name="docs" value="1119" />
Subsection 1.1
</label>
</div>
<div class="subsection">
<label class="label_check sub_label lightblue" for="docs_1120">
<input type="checkbox" id="docs_1120" name="docs" value="1120" />
Subsection 1.2
</label>
</div>
<div class="subsection">
<label class="label_check sub_label lightblue" for="docs_1121">
<input type="checkbox" id="docs_1121" name="docs" value="1121" />
Subsection 1.3
</label>
</div>
<div class="subsection">
<label class="label_check sub_label lightblue" for="docs_1122">
<input type="checkbox" id="docs_1122" name="docs" value="1122" />
Subsection 1.4
</label>
</div>
</blockquote>
</div>
</div>

<div class="document">
<div class="section">
<label class="label_check section_label blue" for="docs_1123">
<input type="checkbox" id="docs_1123" name="docs" value="1123" />
Section 2
</label>

<blockquote>
<div class="subsection">
<label class="label_check sub_label lightblue" for="docs_1124">
<input type="checkbox" id="docs_1124" name="docs" value="1124" />
Subsection 2.1
</label>
</div>
<div class="subsection">
<label class="label_check sub_label lightblue" for="docs_1125">
<input type="checkbox" id="docs_1125" name="docs" value="1125" />
Subsection 2.2
</label>
</div>
<div class="subsection">
<label class="label_check sub_label lightblue" for="docs_1126">
<input type="checkbox" id="docs_1126" name="docs" value="1126" />
Subsection 2.3
</label>
</div>
<div class="subsection">
<label class="label_check sub_label lightblue" for="docs_1127">
<input type="checkbox" id="docs_1127" name="docs" value="1127" />
Subsection 2.4
</label>
</div>
</blockquote>
</div>
</div>

CSS:

.c_on{
background-color:red;
}

最佳答案

尝试

jQuery(document).ready(function($) {
var $all = $('#selectAllButton input[type="radio"]').change(function () {
$sectionchecks.prop('checked', true).trigger('change');
$none.closest('label').removeClass('c_on');
});
var $none = $('#selectNoneButton input[type="radio"]').change(function () {
$sectionchecks.prop('checked', false).trigger('change');
$all.closest('label').removeClass('c_on');
});

$('.section .section_label input').click(function () {
$(this).closest('.section').find('.subsection input[type="checkbox"]').prop('checked', this.checked).trigger('change')
});

$('.section .subsection input').change(function () {
var $section = $(this).closest('.section');
var $childs = $section.find('.subsection input[type="checkbox"]');
$section.find('.section_label input[type="checkbox"]').prop('checked', $childs.not(':checked').length == 0).trigger('change')
});

var $sectionchecks = $('.section').find('input[type="checkbox"]');
$sectionchecks.add($none).add($all).change(function(){
$(this).closest('label').toggleClass('c_on', this.checked);
})
});

演示:Fiddle

关于javascript - Jquery 复选框分组 - 当至少单击一个子复选框时取消选中父级,当选中所有子复选框时选中父级,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19273525/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com