我是前端的初学者。我正在用 HTML、CSS 和 Vanilla Javascript 实现切换开关。
结构:
根据我的 django 数据库中的数据,我创建了一个具有“n”行数的 HTML。每行都有一些数据,如名称、id、状态。状态列的每一行都有切换开关。我已经实现了一个拨动开关,它适用于一个单一的拨动开关。
问题:
当有多行,因此有多个拨动开关时,只有第一个拨动开关被拨动,其他拨动开关不被拨动。当我点击其他切换开关时,第一个也被触发。我希望所有拨动开关单独工作并在我的香草 javascript 中检测到它。
我所知道的:
我知道每个拨动开关都需要唯一的 id,但是当我不知道我将拥有多少行以及如何在 JS 代码中检测所有这些行时,我不知道该怎么做。
代码:
var myswitch = document.querySelectorAll(".idm-switch_div .toggle");
myswitch.forEach((element) => {
element.addEventListener("click", function () {
var isChecked = document.querySelector(".toggle-checkbox").checked;
localStorage.setItem("checkstate", !isChecked);
console.log(!isChecked);
});
});
.toggle {
position: relative;
display: inline-block;
box-sizing: border-box;
height: 15.32px;
width: 30.33px;
border: 1px solid #b8cfd9;
border-radius: 17.5px;
background-color: #ffffff;
}
/* After slide changes */
.toggle:after {
content: "";
position: absolute;
border-radius: 50%;
top: 1px;
left: 1px;
transition: all 0.5s;
height: 11.62px;
width: 11.96px;
background-color: #8566c1;
box-shadow: 0 2px 4px 0 rgba(0, 0, 0, 0.5);
}
.toggle-checkbox:checked + .toggle::after {
left: 59%;
background-color: white;
}
/* Checkbox cheked toggle label bg color */
.toggle-checkbox:checked + .toggle {
height: 15.32px;
width: 30.33px;
border-radius: 17.5px;
background-color: #8566c1;
}
/* Checkbox vanished */
.toggle-checkbox {
display: none;
}
.toggle-checkbox:checked + .toggle::after {
left: 59%;
background-color: white;
}
/* Checkbox cheked toggle label bg color */
.toggle-checkbox:checked + .toggle {
height: 15.32px;
width: 30.33px;
border-radius: 17.5px;
background-color: #8566c1;
}
/* Checkbox vanished */
.toggle-checkbox {
display: none;
}
<div class="idm-switch_div div-container">
<input type="checkbox" id="switch" class="toggle-checkbox" />
<label for="switch" class="toggle"> </label>
</div>
<div class="idm-switch_div div-container">
<input type="checkbox" id="switch" class="toggle-checkbox" />
<label for="switch" class="toggle"> </label>
</div>
任何帮助将不胜感激。先感谢您!。