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

CSS+HTML无JS实现菜单点击展开仅首个元素生效问题求助

问题成因

HTML规范要求元素的id属性全局唯一,你在循环渲染所有联赛时,给每个联赛的复选框、赛事菜单都设置了完全相同的固定id,同时label的for属性也都指向同一个固定id。浏览器处理id匹配时只会识别页面中第一个符合的元素,因此不管点击哪个联赛的label,只会触发第一个复选框的选中状态,进而只会展示第一个联赛的赛事菜单。

修复方案

分两步修改代码即可:

1. 调整CSS规则

将原来基于固定id的选择器改为基于类名的选择器,适配所有联赛的通用逻辑:

.game-info-toggle:checked + .game-menu {
  display: block;
}

2. 修改ERB模板代码

给每个联赛的元素动态生成唯一id,同时绑定对应label的for属性:

<% @leagues.each do |league| %>
  <label for="game-info-toggle-<%= league.id %>" class="cursor-pointer">
    <div class="w-1/4">
      <%= league.title %>
    </div>
  </label>
  <input type="checkbox" class="hidden game-info-toggle" id="game-info-toggle-<%= league.id %>" />
  <div class="hidden game-menu">
    <% league.games.each do |game| %>
      <div class="mb-4">
        <h1><%= game.teams %></h1>
        <h1><%= game.assignment.center_referee&.name %></h1>
        <h1><%= game.assignment.assistant_referee_1&.name %></h1>
        <h1><%= game.assignment.assistant_referee_2&.name %></h1>
        <h1><%= game.assignment.fourth_official&.name %></h1>
      </div>
    <% end %>
  </div>
<% end %>

修改说明

  • 用league.id作为唯一后缀拼接id,保证所有元素id全局唯一,每个label只会触发对应联赛的复选框
  • 给复选框新增game-info-toggle类、赛事菜单新增game-menu类,匹配修改后的CSS选择器,无需为每个联赛单独写样式规则

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 05:09:00