Javascript if 语句不读取条件

Javascript if statement doesn't read condition

提问人:Zuhayr Elias 提问时间:11/9/2023 更新时间:11/9/2023 访问量:35

问:

我有一个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),但这也不起作用。任何帮助都是值得赞赏的。

javascript html if-statement 前端

评论

3赞 WOUNDEDStevenJones 11/9/2023
您只检查页面加载的条件,而不是按钮单击的条件。将条件直接移动到下面,它就会起作用。console.log(x);
1赞 Sean 11/9/2023
该语句仅在加载 javascript 时运行一次。没有任何东西告诉浏览器在每次触发事件时更改背景ifonmousedown

答:

0赞 WOUNDEDStevenJones 11/9/2023 #1

您只检查页面加载的条件,而不是按钮单击的条件。将条件移动到事件侦听器内部。此外,如果默认页面加载不是 DARKMODE,则设置为“开始”,以便第一次单击时打开“深色模式”。let x = 1;

虽然只是在 2 个值之间切换,但它可能应该是一个布尔值 - 而不是你会这样做xlet 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
这并不是说条件在页面加载时只运行一次,而是整个脚本只运行一次。即 只初始化一次,事件侦听器只分配一次,依此类推。但是,一旦您将代码放入事件函数中,它就会在每次触发事件时运行。xonmousedownonmousedownmousedown
0赞 WOUNDEDStevenJones 11/9/2023
@ZuhayrElias 您可能希望将其更改为侦听器,因为如果我将鼠标悬停在链接上,然后移动鼠标并向上移动,JS 目前仍将将其计为“已单击”,即使大多数 UI 仅在鼠标向下和鼠标向上事件位于同一元素上时才将其视为单击。此外,还可以通过键盘访问。developer.mozilla.org/en-US/docs/Web/API/Element/click_event 了解更多信息。clickclick