作者:莫小刚002 | 来源:互联网 | 2023-01-29 16:46
当我单击单个复选框时,它会更改并变为绿色.但是当我检查全天时,会检查所有复选框,但颜色不会改变.检查完整一天后,我取消选中所有仍然全天检查.我被困了,这段代码出了什么问题?
$(document).ready(function() {
$('input:checkbox[name="time"]').change(function() {
$('input:checkbox[name="time"]:not(:checked)').parent().removeClass("active");
$('input:checkbox[name="time"]:checked').parent().addClass("active");
});
});
function selectAll(source) {
checkboxes = document.getElementsByName('time');
for (var i in checkboxes)
checkboxes[i].checked = source.checked;
}
.timing {
width: 500px;
}
.timing label {
width: 100px;
display: inline-block;
border: 1px solid #ccc;
padding: 10px;
text-align: center;
cursor: pointer;
}
.timing label input {
display: block;
}
.timing label.active {
background-color: rgba(0, 204, 0, 1);
}
1> Rory McCross..:
问题是因为您需要change
在单击"全选"选项时触发复选框上的事件,以便他们自己的事件处理程序运行并更改其背景颜色.checked
手动设置状态时不会发生这种情况,因此您可以trigger()
在代码中使用该方法.
您应该注意,您可以通过使用toggleClass()
并删除on*
事件属性来改进逻辑,因为它们已过时.像普通复选框一样使用不显眼的事件处理程序.试试这个:
$('input:checkbox[name="time"]').change(function() {
$(this).closest('label').toggleClass('active', this.checked);
});
$('#selectall').change(function() {
$('input:checkbox[name="time"]').prop('checked', this.checked).trigger('change');
});
.timing {
width: 500px;
}
.timing label {
width: 100px;
display: inline-block;
border: 1px solid #ccc;
padding: 10px;
text-align: center;
cursor: pointer;
}
.timing label input {
display: block;
}
.timing label.active {
background-color: rgba(0, 204, 0, 1);
}