javascript - 如何在 jquery 中仅选择启用的复选框?
问题描述
我有 2 组checkboxes
(将一组视为“主复选框”,另一组作为“子复选框”)由 PHP 动态创建,并从数据库中获取数据。
当页面加载时,“子复选框”默认是禁用的,只有当相应的主复选框被选中时才会启用。
例如 - “星期一,星期二...星期五”将是“主要复选框”。
"9:00 AM -10:00 AM", "10:00 AM -11:00 AM", "11:00 AM -12:00 PM", "12:00 PM -01:00 PM"
将是“子复选框”。
每当检查一个“子复选框”之一时,还应检查其相关的一个工作日的复选框,但仅必须检查已启用的复选框。
我在 JSFiddle https://jsfiddle.net/Anji12/xdo0fzvc/15/中添加了演示
正在接受检查,checkboxes
但即使是残疾人也被检查。如何不检查禁用checkboxes
?
我尝试使用下面的代码,但它不起作用。
if ($(this).is(":checked")){
if(!$("." + selectedSlot).is('[disabled]')){
$("." + selectedSlot).prop("checked", false);
}else{
$("." + selectedSlot).prop("checked", true);
}
} else {
$("." + selectedSlot).prop("checked", false);
}
<div class="container">
<div class="row">
<div class="col-3">
<input type='checkbox' class="day" data-day="1" name="day[]" value="1" /> Monday
</div>
<div class="col-9">
<label class="form-check-label py-1">
<input class="slot selectedSlot1 weekday1" data-slot_time="1" type="checkbox" name="slot_from[]" value='1' > 9:00 AM -10:00 AM
</label>
<label class="form-check-label py-1">
<input class="slot selectedSlot2 weekday1" data-slot_time="2" type="checkbox" name="slot_from[]" value='2' > 10:00 AM -11:00 AM
</label>
<label class="form-check-label py-3">
<input class="slot selectedSlot3 weekday1" data-slot_time="3" type="checkbox" name="slot_from[]" value='3' > 11:00 AM -12:00 PM
</label>
<label class="form-check-label py-3">
<input class="slot selectedSlot4 weekday1" data-slot_time="4" type="checkbox" name="slot_from[]" value='4' > 12:00 PM -01:00 PM
</label>
</div>
</div>
<div class="row">
<div class="col-3">
<input type='checkbox' class="day" data-day="2" name="day[]" value="2" /> Tuesday
</div>
<div class="col-9">
<label class="form-check-label py-1">
<input class="slot selectedSlot1 weekday2" data-slot_time="1" type="checkbox" name="slot_from[]" value='1' > 9:00 AM -10:00 AM
</label>
<label class="form-check-label py-1">
<input class="slot selectedSlot2 weekday2" data-slot_time="2" type="checkbox" name="slot_from[]" value='2' > 10:00 AM -11:00 AM
</label>
<label class="form-check-label py-3">
<input class="slot selectedSlot3 weekday2" data-slot_time="3" type="checkbox" name="slot_from[]" value='3' > 11:00 AM -12:00 PM
</label>
<label class="form-check-label py-3">
<input class="slot selectedSlot4 weekday2" data-slot_time="4" type="checkbox" name="slot_from[]" value='4' > 12:00 PM -01:00 PM
</label>
</div>
</div>
<div class="row">
<div class="col-3">
<input type='checkbox' class="day" data-day="3" name="day[]" value="3" /> Wednesday
</div>
<div class="col-9">
<label class="form-check-label py-1">
<input class="slot selectedSlot1 weekday3" data-slot_time="1" type="checkbox" name="slot_from[]" value='1' > 9:00 AM -10:00 AM
</label>
<label class="form-check-label py-1">
<input class="slot selectedSlot2 weekday3" data-slot_time="2" type="checkbox" name="slot_from[]" value='2' > 10:00 AM -11:00 AM
</label>
<label class="form-check-label py-3">
<input class="slot selectedSlot3 weekday3" data-slot_time="3" type="checkbox" name="slot_from[]" value='3' > 11:00 AM -12:00 PM
</label>
<label class="form-check-label py-3">
<input class="slot selectedSlot4 weekday3" data-slot_time="4" type="checkbox" name="slot_from[]" value='4' > 12:00 PM -01:00 PM
</label>
</div>
</div>
<div class="row">
<div class="col-3">
<input type='checkbox' class="day" data-day="4" name="day[]" value="4" /> Thursday
</div>
<div class="col-9">
<label class="form-check-label py-1">
<input class="slot selectedSlot1 weekday4" data-slot_time="1" type="checkbox" name="slot_from[]" value='1' > 9:00 AM -10:00 AM
</label>
<label class="form-check-label py-1">
<input class="slot selectedSlot2 weekday4" data-slot_time="2" type="checkbox" name="slot_from[]" value='2' > 10:00 AM -11:00 AM
</label>
<label class="form-check-label py-3">
<input class="slot selectedSlot3 weekday4" data-slot_time="3" type="checkbox" name="slot_from[]" value='3' > 11:00 AM -12:00 PM
</label>
<label class="form-check-label py-3">
<input class="slot selectedSlot4 weekday4" data-slot_time="4" type="checkbox" name="slot_from[]" value='4' > 12:00 PM -01:00 PM
</label>
</div>
</div>
<div class="row">
<div class="col-3">
<input type='checkbox' class="day" data-day="5" name="day[]" value="5" /> Friday
</div>
<div class="col-9">
<label class="form-check-label py-1">
<input class="slot selectedSlot1 weekday5" data-slot_time="1" type="checkbox" name="slot_from[]" value='1' > 9:00 AM -10:00 AM
</label>
<label class="form-check-label py-1">
<input class="slot selectedSlot2 weekday5" data-slot_time="2" type="checkbox" name="slot_from[]" value='2' > 10:00 AM -11:00 AM
</label>
<label class="form-check-label py-3">
<input class="slot selectedSlot3 weekday5" data-slot_time="3" type="checkbox" name="slot_from[]" value='3' > 11:00 AM -12:00 PM
</label>
<label class="form-check-label py-3">
<input class="slot selectedSlot4 weekday5" data-slot_time="4" type="checkbox" name="slot_from[]" value='4' > 12:00 PM -01:00 PM
</label>
</div>
</div>
</div>
解决方案
您需要检查所有属性checkboxes
并检查disabled
属性,然后决定是否添加checked
道具。
$("." + selectedSlot).each((e, el) => {
var maininput = $(el).is('[disabled]')
if (!maininput)
$(el).prop("checked", true);
})
工作样本:https ://jsfiddle.net/7tbLvk1r/
试试这个:
$(".slot").prop("disabled", true);
$(".day").click(function () {
let day = $(this).data('day');
let dd = "weekday" + day
if ($(this).is(":checked")) {
$("." + dd).prop("disabled", false);
} else {
$("." + dd).prop("disabled", true);
$("." + dd).prop("checked", false);
}
});
$(".slot").click(function () {
let slot = $(this).data('slot_time');
let selectedSlot = "selectedSlot" + slot;
if ($(this).is(":checked")) {
$("." + selectedSlot).each((e, el) => {
var maininput = $(el).is('[disabled]')
if (!maininput)
$(el).prop("checked", true);
})
} else {
$("." + selectedSlot).prop("checked", false);
}
});
<script src="https://code.jquery.com/jquery-3.5.0.js"></script>
<div class="container">
<div class="row">
<div class="col-3">
<input type='checkbox' class="day" data-day="1" name="day[]" value="1" /> Monday
</div>
<div class="col-9">
<label class="form-check-label py-1">
<input class="slot selectedSlot1 weekday1" data-slot_time="1" type="checkbox" name="slot_from[]" value='1'> 9:00 AM -10:00 AM
</label>
<label class="form-check-label py-1">
<input class="slot selectedSlot2 weekday1" data-slot_time="2" type="checkbox" name="slot_from[]" value='2'> 10:00 AM -11:00 AM
</label>
<label class="form-check-label py-3">
<input class="slot selectedSlot3 weekday1" data-slot_time="3" type="checkbox" name="slot_from[]" value='3'> 11:00 AM -12:00 PM
</label>
<label class="form-check-label py-3">
<input class="slot selectedSlot4 weekday1" data-slot_time="4" type="checkbox" name="slot_from[]" value='4'> 12:00 PM -01:00 PM
</label>
</div>
</div>
<div class="row">
<div class="col-3">
<input type='checkbox' class="day" data-day="2" name="day[]" value="2" /> Tuesday
</div>
<div class="col-9">
<label class="form-check-label py-1">
<input class="slot selectedSlot1 weekday2" data-slot_time="1" type="checkbox" name="slot_from[]" value='1'> 9:00 AM -10:00 AM
</label>
<label class="form-check-label py-1">
<input class="slot selectedSlot2 weekday2" data-slot_time="2" type="checkbox" name="slot_from[]" value='2'> 10:00 AM -11:00 AM
</label>
<label class="form-check-label py-3">
<input class="slot selectedSlot3 weekday2" data-slot_time="3" type="checkbox" name="slot_from[]" value='3'> 11:00 AM -12:00 PM
</label>
<label class="form-check-label py-3">
<input class="slot selectedSlot4 weekday2" data-slot_time="4" type="checkbox" name="slot_from[]" value='4'> 12:00 PM -01:00 PM
</label>
</div>
</div>
<div class="row">
<div class="col-3">
<input type='checkbox' class="day" data-day="3" name="day[]" value="3" /> Wednesday
</div>
<div class="col-9">
<label class="form-check-label py-1">
<input class="slot selectedSlot1 weekday3" data-slot_time="1" type="checkbox" name="slot_from[]" value='1'> 9:00 AM -10:00 AM
</label>
<label class="form-check-label py-1">
<input class="slot selectedSlot2 weekday3" data-slot_time="2" type="checkbox" name="slot_from[]" value='2'> 10:00 AM -11:00 AM
</label>
<label class="form-check-label py-3">
<input class="slot selectedSlot3 weekday3" data-slot_time="3" type="checkbox" name="slot_from[]" value='3'> 11:00 AM -12:00 PM
</label>
<label class="form-check-label py-3">
<input class="slot selectedSlot4 weekday3" data-slot_time="4" type="checkbox" name="slot_from[]" value='4'> 12:00 PM -01:00 PM
</label>
</div>
</div>
<div class="row">
<div class="col-3">
<input type='checkbox' class="day" data-day="4" name="day[]" value="4" /> Thursday
</div>
<div class="col-9">
<label class="form-check-label py-1">
<input class="slot selectedSlot1 weekday4" data-slot_time="1" type="checkbox" name="slot_from[]" value='1'> 9:00 AM -10:00 AM
</label>
<label class="form-check-label py-1">
<input class="slot selectedSlot2 weekday4" data-slot_time="2" type="checkbox" name="slot_from[]" value='2'> 10:00 AM -11:00 AM
</label>
<label class="form-check-label py-3">
<input class="slot selectedSlot3 weekday4" data-slot_time="3" type="checkbox" name="slot_from[]" value='3'> 11:00 AM -12:00 PM
</label>
<label class="form-check-label py-3">
<input class="slot selectedSlot4 weekday4" data-slot_time="4" type="checkbox" name="slot_from[]" value='4'> 12:00 PM -01:00 PM
</label>
</div>
</div>
<div class="row">
<div class="col-3">
<input type='checkbox' class="day" data-day="5" name="day[]" value="5" /> Friday
</div>
<div class="col-9">
<label class="form-check-label py-1">
<input class="slot selectedSlot1 weekday5" data-slot_time="1" type="checkbox" name="slot_from[]" value='1'> 9:00 AM -10:00 AM
</label>
<label class="form-check-label py-1">
<input class="slot selectedSlot2 weekday5" data-slot_time="2" type="checkbox" name="slot_from[]" value='2'> 10:00 AM -11:00 AM
</label>
<label class="form-check-label py-3">
<input class="slot selectedSlot3 weekday5" data-slot_time="3" type="checkbox" name="slot_from[]" value='3'> 11:00 AM -12:00 PM
</label>
<label class="form-check-label py-3">
<input class="slot selectedSlot4 weekday5" data-slot_time="4" type="checkbox" name="slot_from[]" value='4'> 12:00 PM -01:00 PM
</label>
</div>
</div>
</div>
推荐阅读
- address-sanitizer - Address Sanitizer - 我可以在 N 个缺陷后停止吗?
- javascript - 如何合并 JavaScript 数组中的某些项目?
- c++ - 如何将 lambda 参数保存在内存中?
- cobol - Django模板;查询集为空
- load - 我可以从外部存储加载 .gltf 或 .glb 文件吗
- typescript - 我可以在打字稿中定义字符串数组和未定义的数组吗?
- javascript - 将 JSON 中包含引号、URL 等的大型 Javascript 对象传递给 POST 调用
- scipy - Cython/Armadillo 错误:scipy.sparse.csc_matrix 到 SpMat 的转换
- excel - If Not IsError(MATCH) 没有绕过错误。如何跳过未找到的 MATCHes?
- python - sklearn min_impurity_decrease 解释