You need to enable JavaScript to run this app. 多行列场景下jQuery show/hide功能运行异常该如何修复
优惠活动
大模型
产品
解决方案
定价
更多

多行列场景下jQuery show/hide功能运行异常该如何修复

问题根源

  • 代码中使用了全局唯一的固定ID divData、divDataData,多行列场景下所有行共用相同ID,违反HTML ID唯一规范,jQuery选择器只会匹配到第一个符合条件的元素,导致操作错位。
  • 点击新行按钮时没有重置上一行的按钮状态和内容显示状态,导致多个按钮同时显示Hide文本,内容区域只展示最后一次点击的数据。

修复方案

第一步:调整HTML结构

把固定ID改为类名,保证每个按钮和对应的数据区域为相邻同级元素,方便通过DOM关系匹配:

<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<!-- 每一行的结构 多行直接重复下面这段即可 -->
<a href="javascript:;" class="showDiv" data-id="#audioID#">Show Daily +/-</a>
<div class="row divData" style="display:none;">
  <div class="col-md-12">
    <div class="card-box">
      <div class="divDataData"></div>
    </div>
  </div>
</div>

第二步:调整JS逻辑

点击按钮时先重置所有其他行的状态,再操作当前点击行的对应元素:

$(document).on('click', '.showDiv', function() {
  // 先重置所有其他行的状态
  $('.showDiv').not(this).text('Show Daily +/-').removeClass('removeDiv');
  $('.divData').not($(this).next()).hide();

  // 操作当前行元素
  const $currentData = $(this).next('.divData');
  const $currentDataContent = $currentData.find('.divDataData');
  $currentData.show();
  $currentDataContent.load('audioDailyCounts.cfm?audioID=' + $(this).attr('data-id') + '&_new=' + Math.random());
  $(this).text('Hide Daily +/-');
  $(this).addClass('removeDiv');
});

$(document).on('click', '.removeDiv', function(e) {
  // 阻止事件冒泡到上层的showDiv点击事件
  e.stopPropagation();
  const $currentData = $(this).next('.divData');
  $currentData.hide();
  $(this).text('Show Daily +/-');
  $(this).removeClass('removeDiv');
});

补充说明

如果你的按钮和数据区域不是相邻同级结构,可以给每个行加统一的父容器类,通过closest(父容器类)再find(数据区域类)的方式匹配对应元素,逻辑和上述方案一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.09 07:18:04