JS 切换只添加 "class" 而没有 class 名称,添加和删除工作正常
JS toggle adding just "class" without class name, add and remove working properly
我正在学习并尝试将深色模式按钮添加到我的网站。我有工作开关按钮和 CSS。但是当我想添加到 body class "dark" 时,切换功能无法正常工作。功能添加和删除是有效的,但我不想通过“if”来解决它。
const switchButton = document.querySelector(".switch")
switchButton.addEventListener("click", () => {
document.querySelector("body").classList.toggle("dark")
})
当我们用 add 替换 toggle 时 - 它工作正常。
这是实时页面:https://gearlistmaker.com/
由于事件冒泡,点击事件触发了两次
你可以检查复选框状态,这样更有意义也更安全
https://jsfiddle.net/mplungjan/7hfv5ynb/
switchButton.addEventListener("click", (e) => {
document.querySelector("body").classList.toggle("dark",
switchButton.querySelector("input[type=checkbox]").checked)
})
您的代码运行良好。我检查检查是检查,然后我做出决定。如果检查被选中关闭灯并添加 class 到 body,如果没有被选中删除 class 暗...
const switchButton = document.querySelector(".switch")
const body = document.querySelector("body");
switchButton.addEventListener("click", () => {
switchButton.checked ? body.classList.add("dark") : body.classList.remove("dark");
})
body.dark {background:black;}
body {background:white;}
<input type="checkbox" class="switch dark">Toggle dark</ button>
开关内部有一个输入。我认为这会导致点击事件冒泡到开关元素并导致切换触发两次。尝试添加以下内容,以便只触发一个点击事件:
document.querySelector(".switch > input").addEventListener("click", (e) => {
e.stopPropagation();
})
或者,将事件附加到输入:
const switchButtonInput = document.querySelector(".switch > input")
switchButtonInput.addEventListener("click", () => {
document.querySelector("body").classList.toggle("dark")
});
body.dark { background-color: grey; }
.switch { padding: 10px; border: 1px solid black; }
.switch > input { display: none; }
<label class="switch">
<input type="checkbox">
toggle
</label>
我正在学习并尝试将深色模式按钮添加到我的网站。我有工作开关按钮和 CSS。但是当我想添加到 body class "dark" 时,切换功能无法正常工作。功能添加和删除是有效的,但我不想通过“if”来解决它。
const switchButton = document.querySelector(".switch")
switchButton.addEventListener("click", () => {
document.querySelector("body").classList.toggle("dark")
})
当我们用 add 替换 toggle 时 - 它工作正常。
这是实时页面:https://gearlistmaker.com/
由于事件冒泡,点击事件触发了两次
你可以检查复选框状态,这样更有意义也更安全
https://jsfiddle.net/mplungjan/7hfv5ynb/
switchButton.addEventListener("click", (e) => {
document.querySelector("body").classList.toggle("dark",
switchButton.querySelector("input[type=checkbox]").checked)
})
您的代码运行良好。我检查检查是检查,然后我做出决定。如果检查被选中关闭灯并添加 class 到 body,如果没有被选中删除 class 暗...
const switchButton = document.querySelector(".switch")
const body = document.querySelector("body");
switchButton.addEventListener("click", () => {
switchButton.checked ? body.classList.add("dark") : body.classList.remove("dark");
})
body.dark {background:black;}
body {background:white;}
<input type="checkbox" class="switch dark">Toggle dark</ button>
开关内部有一个输入。我认为这会导致点击事件冒泡到开关元素并导致切换触发两次。尝试添加以下内容,以便只触发一个点击事件:
document.querySelector(".switch > input").addEventListener("click", (e) => {
e.stopPropagation();
})
或者,将事件附加到输入:
const switchButtonInput = document.querySelector(".switch > input")
switchButtonInput.addEventListener("click", () => {
document.querySelector("body").classList.toggle("dark")
});
body.dark { background-color: grey; }
.switch { padding: 10px; border: 1px solid black; }
.switch > input { display: none; }
<label class="switch">
<input type="checkbox">
toggle
</label>