javascript - 如何在同一页面上使用具有相同功能和不同 CSS 的两个切换按钮?
问题描述
我一直在努力在菜单栏和页脚页面上添加 2 个具有不同样式(css)的切换按钮。它们将用于夜间和黑暗模式。
但是,当我使用
onclick="themeToggle()" id="theme-switcher"
对于这两个按钮,只有一个有效。
这是我的切换按钮测试页面。
这是正在使用的js:
var tSwitcher = document.getElementById('theme-switcher');
let element = document.body;
let onpageLoad = localStorage.getItem("theme") || "";
if(onpageLoad != null && onpageLoad == 'dark-mode'){
tSwitcher.checked = true;
}
element.classList.add(onpageLoad);
function themeToggle(){
if(tSwitcher.checked){
localStorage.setItem('theme', 'dark-mode');
element.classList.add('dark-mode');
} else {
localStorage.setItem('theme', '');
element.classList.remove('dark-mode');
}
}
这是两个切换按钮的代码
<label class="switcher">
<input type="checkbox" onclick="themeToggle()" id="theme-switcher">
<div>
<i class="fas fa-sun"></i>
<i class="fas fa-arrow-left arrow"></i>
<i class="fas fa-moon"></i>
</div>
</label>
<label class="switch" style="padding: 23px 0;">
<input type="checkbox" onclick="themeToggle()" id="theme-switcher">
<div>
<span></span>
</div>
请帮助我解决代码问题。
谢谢您的帮助。
解决方案
因为您在 中使用 ID <input type="checkbox" onclick="themeToggle()" id="theme-switcher">
,所以在 other 中重复checkbox
。所以只会采用 DOM 中的第一个 ID。
改变你的<input type="checkbox" onclick="themeToggle()" id="theme-switcher">
至
<input type="checkbox" onclick="themeToggle()" class="theme-switcher">
并更新以下代码
注意:不要重复ID
var tSwitcher = document.getElementsByClassName('theme-switcher');
let element = document.body;
let onpageLoad = localStorage.getItem("theme") || "";
if (onpageLoad != null && onpageLoad == 'dark-mode') {
for(let i = 0; i<tSwitcher.length; i++){
tSwitcher[i].checked = true;
}
}
if(onpageLoad) element.classList.add(onpageLoad);
所以更新你themeToggle()
的
function themeToggle() {
if (event.target.checked) {
localStorage.setItem('theme', 'dark-mode');
element.classList.add('dark-mode');
} else {
localStorage.setItem('theme', '');
element.classList.remove('dark-mode');
}
}
推荐阅读
- javascript - 在回调之前反应 setState() 不渲染
- python - 为什么这个 python 正则表达式不起作用?
- php - 如何从 SQL 搜索结果列表中获取值并附加到 URL
- solidity - 使用solidity 和Web3,当我尝试执行 myEvent.get() 时,我得到的只是 myEvent: undefined
- javascript - 尝试使用 jquery 将 id 传递给 nodejs
- go - 如何使用库或实用程序函数组织结构链代码的文件夹结构?
- jenkins - 使用选定的插件更新 Jenkins
- reactjs - Object.keys() 并找到
- java - 使用并行数组编写简单的 String hashMap。重新散列后获取某些键的空值
- r - 如何部署使用 gWidgets 和脚本的 R 应用程序?