【发布时间】:2017-06-19 08:10:49
【问题描述】:
我修改了现有的fiddle 以获得具有选择/取消选择功能的多个复选框的综合解决方案。现在,它计算选中了多少个复选框,并且还给出了选中了哪些复选框。看起来它工作正常,但有一些问题需要修复,需要进一步改进:
- 当您先勾选选项A,然后点击“全选”复选框时,系统无法正常工作。
- 整个代码看起来有点长。我认为我们可以通过某种方式缩短代码,但我不知道如何。
- 当我们手动检查所有选项时,应自动选中 firstgroup 复选框,否则当未选中任何选项时,应自动取消选中 firstgroup 复选框。相应地,div 的内容应该改变。
感谢您的任何贡献。
<div style="margin-left: 20px;">
<input type="checkbox" id="firstgroup" /> Select All<br>
<input type="checkbox" class="order" id="first" /> A<br>
<input type="checkbox" class="order" id="second" /> B<br>
<input type="checkbox" class="order" id="third" /> C
</div>
<div id="result"></div>
<div id="form">Lorem ipsum</div>
x = document.getElementById("result");
y = document.getElementById("form");
x.innerHTML = '';
y.innerHTML = '';
$("#firstgroup").click(function() {
var checkBoxes = $("input[type='checkbox'].order");
checkBoxes.prop("checked", !checkBoxes.prop("checked"));
});
$("input[type='checkbox'].order").change(function() {
var check = $("input[type='checkbox'].order:checked").length;
var tnocb = $("input[type='checkbox'].order").length;
var classes = $("input[type='checkbox'].order:checked").map(function() {
return this.id;
}).get().join(", ");
if(check > 0) {
if(check == 1) {
x.innerHTML = 'Checked Checkbox: ' + classes + '<br>Total number of checked checkbox: ' + check;
} else if(check == tnocb) {
x.innerHTML = 'all of them are checked';
} else {
x.innerHTML = 'Checked Checkboxes: ' + classes + '<br>Total number of checked checkboxes: ' + check;
}
y.style.display = 'block';
} else {
x.innerHTML = '';
y.style.display = 'none';
}
return false;
});
【问题讨论】:
-
嗯,有点不清楚你真正想要什么,但看看jsfiddle.net/LUtJF/35
-
亲爱的卡斯滕,感谢您的回复。它运作良好。也许,为了进一步改进系统,我们可以添加另一个功能,例如当我们手动检查所有选项时,系统应该自动检查 firstgroup 复选框。我们怎么能做到这一点?现在,当手动检查所有选项时,它不会自动检查 firstgroup 复选框。
-
类似地,当我们选中 firstgroup 复选框并手动取消选中某些选项时,firstgroup 复选框仍处于选中状态。这是另一个需要修复的项目。
标签: javascript jquery checkbox