You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何让CheckUpgrades函数中第二个if语句满足条件后仅执行一次

解决条件块仅执行一次的问题

嘿,我来帮你搞定这个需求!你想要让第二个if语句的逻辑只触发一次,之后不管定时器怎么调用CheckUpgrades都不再执行,对吧?这其实很容易实现,核心思路就是加一个状态标志来记录这个操作是否已经完成过。

下面给你两种可行的方案:

方案一:使用全局标志变量

这是最直观的方式,定义一个全局变量来追踪操作是否执行过:

// 初始化标志:false表示还没执行过隐藏操作
let hasHiddenUpgrades = false;

function CheckUpgrades(){ 
  if(cookies >= 1000){ 
    document.getElementById("upgrades").style.removeProperty("display"); 
  } 
  // 只有当条件满足且未执行过时,才进入逻辑
  if (clickMultiplier == 2 && !hasHiddenUpgrades){ 
    document.getElementById("upgrades").style.display = "none"; 
    // 执行后把标志设为true,锁定后续执行
    hasHiddenUpgrades = true;
    // cookies = cookies - 500; MAKES IT GO IN REVERSE 
  } 
} 

原理很简单:hasHiddenUpgrades就像一个一次性开关,第一次满足clickMultiplier == 2时,开关被触发,执行隐藏操作后立刻把开关“锁死”(设为true),之后定时器再调用函数时,这个if条件就永远不会成立了。

方案二:使用DOM元素的dataset存储状态

如果你不想用全局变量(避免全局污染),可以把状态直接绑定到目标DOM元素的dataset属性上,更优雅:

function CheckUpgrades(){ 
  // 先获取目标元素,避免重复查询DOM
  const upgradesElement = document.getElementById("upgrades");
  
  if(cookies >= 1000){ 
    upgradesElement.style.removeProperty("display"); 
  } 
  // 检查条件+元素是否未被标记为已隐藏
  if (clickMultiplier == 2 && !upgradesElement.dataset.hasBeenHidden){ 
    upgradesElement.style.display = "none"; 
    // 给元素添加标记,标记已执行过隐藏
    upgradesElement.dataset.hasBeenHidden = "true";
    // cookies = cookies - 500; MAKES IT GO IN REVERSE 
  } 
} 

这种方式把状态和对应的DOM元素绑定在一起,不需要额外的全局变量,代码更整洁,尤其适合小型项目或单元素场景。

内容的提问来源于stack exchange,提问作者Joris2110

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 08:15:27