提问人:Zuhayr Elias 提问时间:11/9/2023 更新时间:11/9/2023 访问量:35
Javascript if 语句不读取条件
Javascript if statement doesn't read condition
问:
我有一个div,它应该根据点击的次数在点击时打开或关闭暗模式。但是,此代码似乎不起作用。点击计数功能正常,只是 if 语句给我带来了问题。
let x = 0;
document.getElementById("darkmode").onmousedown = function darkMode(){
x+=1;
console.log(x);
}
if(x % 2 == 0){
document.body.style.backgroundColor = "#0A0A0A";
}
else {
document.body.style.backgroundColor = "white";
}
背景的颜色根本没有改变。我尝试在 if 语句中使用更简单的条件 (x == 5),但这也不起作用。任何帮助都是值得赞赏的。
答:
0赞
WOUNDEDStevenJones
11/9/2023
#1
您只检查页面加载的条件,而不是按钮单击的条件。将条件移动到事件侦听器内部。此外,如果默认页面加载不是 DARKMODE,则设置为“开始”,以便第一次单击时打开“深色模式”。let x = 1;
虽然只是在 2 个值之间切换,但它可能应该是一个布尔值 - 而不是你会这样做x
let darkmode = false;
x++
darkMode = !darkMode;
let darkmode = false;
document.getElementById("darkmode").onmousedown = function darkMode(event) {
darkmode = !darkmode;
// move the conditional logic inside of the event function
if(darkmode){
document.body.classList.add('darkmode');
} else {
document.body.classList.remove('darkmode');
}
event.preventDefault();
}
.darkmode {
background-color: #0A0A0A;
}
.darkmode p {
color: white;
}
<a href="#" id="darkmode">Toggle darkmode</a>
<p>here is some content</p>
评论
0赞
Zuhayr Elias
11/9/2023
非常感谢您的帮助。我从C++开始学习JS,我不知道条件只在页面加载时运行一次。也感谢您的布尔提示,但我计划添加更多主题。
0赞
WOUNDEDStevenJones
11/9/2023
这并不是说条件在页面加载时只运行一次,而是整个脚本只运行一次。即 只初始化一次,事件侦听器只分配一次,依此类推。但是,一旦您将代码放入事件函数中,它就会在每次触发事件时运行。x
onmousedown
onmousedown
mousedown
0赞
WOUNDEDStevenJones
11/9/2023
@ZuhayrElias 您可能希望将其更改为侦听器,因为如果我将鼠标悬停在链接上,然后移动鼠标并向上移动,JS 目前仍将将其计为“已单击”,即使大多数 UI 仅在鼠标向下和鼠标向上事件位于同一元素上时才将其视为单击。此外,还可以通过键盘访问。developer.mozilla.org/en-US/docs/Web/API/Element/click_event 了解更多信息。click
click
评论
console.log(x);
if
onmousedown