javascript - 选中的 div 上的 Laravel 复选框处于活动状态
问题描述
我有一个 foreach 循环,我将在 div 上填充时间段 ID、日期和时间。我想要实现的是在选中 div 中的复选框后,选定的 div 将突出显示。如果我尝试选中另一个复选框,它将取消选中我选中的前一个复选框。我正在为我的 javascript 代码使用本机 javascript。
以下是我的html代码:
<div class="timeslots-section">
<div>
<div class="timeslots text-center">
@foreach ($timeslots as $timeslot)
<div class="timeslot" id="timeslot">
<input type="checkbox" id="timeslotchk" name="timeslot" value="{{$timeslot->timeslotID}}">
<label>{!! presentTableDate($timeslot->deliveryDate) !!}</label>
<label>{!! displayTime($timeslot->deliveryStartTime) !!} -
{!! displayTime($timeslot->deliveryEndTime) !!}</label>
</div>
@endforeach
</div>
</div>
</div>
以下是我当前的javascript:
var selectall = document.getElementsById('timeslotchk');
var timeslotdiv = document.getElementById('timeslot');
selectall.onclick = function() {
if(document.getElementById('checkbox1').checked = true){
timeslotdiv.classList.add('active');
}
else{
timeslotdiv.classList.remove('active');
}
}
解决方案
在这里检查一下我修复了你正在尝试的功能。timeslot
检查当前 div 时,您的代码没有重置所有其他div。在下面的代码中,更改事件函数checkboxChecked()
首先重置所有 div,包括当前的 div,然后检查更改的值。如果选中了当前复选框,true
则设置它,否则保持重置。
const selectElement = document.querySelectorAll('.timeslotchk');
selectElement.forEach((element) => element.addEventListener('change', checkboxChecked));
function checkboxChecked() {
const checked = this.checked; //save current value
//reset all time slot divs
const timeslotDivs = document.getElementsByClassName('timeslot');
Array.from(timeslotDivs).forEach(function(t) {
t.classList.remove('active');
t.querySelector('.timeslotchk').checked = false;
});
//set current div based on current value
if(checked) {
this.checked=true;
this.parentNode.classList.add('active');
}
}
.timeslot {
border: 1px solid black;
margin-bottom: 10px;
}
.active {
background: green;
}
<div class="timeslots-section">
<div>
<div class="timeslots text-center">
<!-- @foreach ($timeslots as $timeslot) -->
<div class="timeslot active">
<input class="timeslotchk" type="checkbox" name="timeslot" value="timeslotID" checked>
<label>(deliveryDate)</label>
<label>
(deliveryStartTime) - (deliveryEndTime)
</label>
</div>
<div class="timeslot">
<input class="timeslotchk" type="checkbox" name="timeslot" value="timeslotID">
<label>(deliveryDate)</label>
<label>
(deliveryStartTime) - (deliveryEndTime)
</label>
</div>
<div class="timeslot">
<input class="timeslotchk" type="checkbox" name="timeslot" value="timeslotID">
<label>(deliveryDate)</label>
<label>
(deliveryStartTime) - (deliveryEndTime)
</label>
</div>
<div class="timeslot">
<input class="timeslotchk" type="checkbox" name="timeslot" value="timeslotID">
<label>(deliveryDate)</label>
<label>
(deliveryStartTime) - (deliveryEndTime)
</label>
</div>
<!-- @endforeach -->
</div>
</div>
</div>
推荐阅读
- vba - 1 基于字段值对多个Excel文件的访问查询
- c++ - 在多线程应用程序中使用全局数组
- azure - Powershell 上的 Azure CLI 命令给出 '"c:\\\"Program' 不被识别为内部或外部命令,
- javascript - 如何从纯 JS 访问 Axios?
- python - 如何从现有图在 networkx 中创建随机图?
- makefile - 需要检查 GNUmakefile 中是否存在标志
- django - Django 远程服务器正在运行,但我无法连接到本地 Web 浏览器中的管理界面
- python - 为什么在使用函数时只打印最后一个元素
- php - mcrypt_generic 是否容易受到 padding oracle 攻击?
- math - RYYB 图像的 RYB 和 RGB 颜色空间之间的转换