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

JavaScript中如何让已触发的onclick按钮禁用逻辑刷新页面后仍生效

解决方案

要解决刷新后冷却时间重置的问题,核心是把冷却截止时间持久化存储在本地,页面加载时自动校验当前是否还在冷却期,自动恢复禁用状态和剩余倒计时。

完整修改后的代码

JS代码

// 页面加载完成后先校验冷却状态
$(document).ready(function () {
  const COOL_DOWN_KEY = 'button_cool_down_end';
  // 读取存储的冷却截止时间
  const coolDownEnd = localStorage.getItem(COOL_DOWN_KEY);
  const now = Date.now();

  // 如果还在冷却期
  if (coolDownEnd && now < Number(coolDownEnd)) {
    // 禁用按钮
    $("#upside").attr("disabled", true);
    $("#downside").attr("disabled", true);
    // 计算剩余冷却时间
    const remainTime = Number(coolDownEnd) - now;
    // 启动倒计时
    setTimeout(enableButtons, remainTime);
  }

  // 绑定按钮点击事件,也可以保留原有onclick写法
  $("#upside").click(up);
});

function up() {
  const COOL_DOWN_KEY = 'button_cool_down_end';
  const coolDownTime = 15 * 1000; // 15秒冷却时长
  const coolDownEnd = Date.now() + coolDownTime;
  // 存储冷却截止时间到本地
  localStorage.setItem(COOL_DOWN_KEY, coolDownEnd);
  // 禁用按钮
  $("#upside").attr("disabled", true);
  $("#downside").attr("disabled", true);
  // 启动倒计时
  setTimeout(enableButtons, coolDownTime);
}

// 复用的恢复按钮方法
function enableButtons() {
  const COOL_DOWN_KEY = 'button_cool_down_end';
  $("#upside").removeAttr("disabled");
  $("#downside").removeAttr("disabled");
  // 清除存储的冷却标记
  localStorage.removeItem(COOL_DOWN_KEY);
  window.location = '/Balnce_add';
}

HTML代码

保留原有代码即可,推荐删除onclick属性用上述JS事件绑定写法更规范:

<button id="upside" type="submit" class="btn btn-success">Up</button>

逻辑说明

  • 用localStorage存储冷却截止时间,属于浏览器本地持久化存储,刷新/关闭页面再打开数据都不会丢失
  • 页面每次加载都会先校验当前时间是否在冷却期内,没到期会自动禁用按钮并启动剩余时间的倒计时
  • 倒计时结束后自动清除存储的冷却标记,避免下次打开页面误禁用按钮
  • 移除了原代码中冗余的$(document).ready嵌套,因为点击触发函数时DOM已经加载完成,不需要重复判断

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 16:18:02