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

JS实现顺序点击按钮功能时213按钮状态异常如何修复

问题原因

  • HTML存在重复ID属性:文本为93和213的两个按钮都用了id="dica6",而document.getElementById()在页面存在重复ID时只会返回第一个匹配的元素,导致点击「Próxima dica」重置状态时,213按钮永远不会被选中修改透明度,始终保持点击后的0.5半透明状态,看起来就像一直被按下。
  • 原JS代码重复冗余,重置逻辑只修改了透明度,没有统一恢复按钮的可点击状态,容易出现状态遗漏。

修复步骤

1. 修正HTML重复ID

给213按钮分配唯一ID,补全你需要的ID序列即可,示例如下:

<div class="row">
  <button id="dica6" onclick="mudarOpacidade(event)">93</button>
  <button id="dica1" onclick="mudarOpacidade(event)">976</button>
  <button id="dica3" onclick="mudarOpacidade(event)">1142</button>
  <!-- 把重复的dica6改为唯一ID,这里示例用dica4,你可以根据自己的顺序调整 -->
  <button id="dica4" onclick="mudarOpacidade(event)">213</button>
  <button id="dica2" onclick="mudarOpacidade(event)">615</button>
  <button id="dica7" onclick="mudarOpacidade(event)">987</button>
</div>

2. 优化JS逻辑

简化重复代码,先统一重置所有按钮状态再处理当前步骤的禁用逻辑,同时修改样式设置方式避免优先级问题:

var clicks = 0;
// 提前定义所有按钮ID,方便批量操作,缺少的ID可以自行补全
const allButtonIds = ["dica0", "dica1", "dica2", "dica3", "dica4", "dica5", "dica6", "dica7"];

function mudarOpacidade(event) {
  const targetBtn = event.target;
  // 直接修改opacity属性,不要用setAttribute覆盖整个style
  targetBtn.style.opacity = 0.5;
}

function desabilitar(event) {
  clicks += 1;
  // 先统一重置所有按钮的透明度和可点击状态
  allButtonIds.forEach(btnId => {
    const btn = document.getElementById(btnId);
    if (btn) {
      btn.style.opacity = 1;
      btn.disabled = false;
    }
  });
  // 仅禁用当前步骤对应的按钮,完全匹配你原来的case逻辑
  if (clicks >=1 && clicks <=7) {
    const currentDisabledBtn = document.getElementById(allButtonIds[clicks]);
    if (currentDisabledBtn) {
      currentDisabledBtn.disabled = true;
    }
  }
}

修改后213按钮会和其他按钮一起正常重置透明度,也只会在第6次点击「Próxima dica」时才会进入禁用状态。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 04:24:05