0

0

jQuery 实现卡片内按钮切换详情面板显示/隐藏(支持单开与多开模式)

聖光之護

聖光之護

发布时间:2026-02-26 08:36:01

|

950人浏览过

|

来源于php中文网

原创

jQuery 实现卡片内按钮切换详情面板显示/隐藏(支持单开与多开模式)

本文详解如何使用 jQuery 为多个卡片中的“More Info”按钮绑定点击事件,精准控制对应 .more-info-panel 的显隐状态,并支持「单开(Accordion)」与「多开」两种交互模式,避免事件重复绑定和状态判断混乱。

本文详解如何使用 jquery 为多个卡片中的“more info”按钮绑定点击事件,精准控制对应 `.more-info-panel` 的显隐状态,并支持「单开(accordion)」与「多开」两种交互模式,避免事件重复绑定和状态判断混乱。

在构建动态卡片列表(如加密货币行情卡)时,常需通过按钮展开/收起详情面板。但若直接混合使用 onclick 属性与 jQuery .on('click'),极易导致事件重复绑定、状态逻辑错乱(例如只能展开不能收起),甚至因 DOM 遍历方式不当引发性能或兼容性问题。

以下提供简洁、健壮、可维护的 jQuery 解决方案,核心原则是:委托绑定、就近查找、状态驱动

✅ 推荐实现(单开 Accordion 模式)

$(document).ready(function() {
  // 绑定一次事件,委托至所有 .coin-card 内的 .btn-info 按钮
  $('.coin-card').on('click', '.btn-info', async function(e) {
    e.preventDefault(); // 阻止默认行为(如跳转、表单提交)

    const $card = $(this).closest('.coin-card');      // 定位当前卡片容器
    const $panel = $card.find('.more-info-panel');   // 获取对应详情面板

    // 判断当前面板是否已展开(即不包含 'hidden' 类)
    const isCurrentlyOpen = !$panel.hasClass('hidden');

    // 【关键】先关闭所有其他面板(实现单开效果)
    $('.coin-card .more-info-panel').addClass('hidden');

    // 若原为展开状态,则本次点击应收起 → 不做操作(保持 hidden)
    // 若原为收起状态,则本次点击应展开 → 移除 hidden 类
    if (!isCurrentlyOpen) {
      $panel.removeClass('hidden');

      // ✨ 可在此处加载并填充动态数据(示例)
      // const coinName = $card.find('.coin-name').text().toLowerCase();
      // const data = await fetchMoreInfo(coinName);
      // $card.find('.more-info-image').attr('src', data?.image?.large || '');
      // $card.find('.usd').text(`USD: $${data?.market_data?.current_price?.usd || '—'}`);
    }
  });
});

? 说明:$('.coin-card').on('click', '.btn-info', ...) 使用了事件委托,即使后续动态添加新卡片,也无需重新绑定事件,大幅提升可扩展性。

元气AI Bot
元气AI Bot

猎豹推出的国产Clawdbot ,一键安装,免费使用

下载

? 多开模式(仅切换自身,互不影响)

若需支持多个面板同时展开,只需将上述逻辑简化为:

$('.coin-card').on('click', '.btn-info', function(e) {
  e.preventDefault();
  const $panel = $(this).closest('.coin-card').find('.more-info-panel');
  $panel.toggleClass('hidden'); // 简洁高效,自动处理显隐切换
});

? 必备 CSS 样式(确保 hidden 类生效)

.coin-card .more-info-panel.hidden {
  display: none;
}
/* 可选:添加过渡动画提升体验 */
.coin-card .more-info-panel {
  transition: max-height 0.3s ease, opacity 0.2s ease;
}

⚠️ 关键注意事项

  • 移除 HTML 中的 onclick:原代码中
  • 避免 e.stopImmediatePropagation() 滥用:该方法会阻止同一事件阶段的其他监听器执行,在委托场景下易误伤必要逻辑;推荐使用 e.preventDefault() 阻止默认行为即可。
  • async/await 安全使用:若 fetchMoreInfo() 是异步请求,建议在 toggleClass 后再更新内容(避免面板未显示时渲染),或结合 fadeIn() 等动画确保视觉一致性。
  • DOM 查找优化:始终优先使用 $(this).closest(...) 和 .find(...),避免全局遍历 nodeList 或冗余 forEach 循环,提升性能与可读性。

✅ 总结

一个健壮的卡片详情切换功能,不在于逻辑复杂度,而在于事件绑定方式合理、DOM 定位精准、状态管理清晰。采用事件委托 + closest() + toggleClass() / 条件 removeClass() 的组合,即可优雅支持单开或多开需求,代码简洁、易于测试、便于后期维护。切记:统一事件管理入口,远离内联 JavaScript。

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
jquery插件有哪些
jquery插件有哪些

jquery插件有jQuery UI、jQuery Validate、jQuery DataTables、jQuery Slick、jQuery LazyLoad、jQuery Countdown、jQuery Lightbox、jQuery FullCalendar、jQuery Chosen和jQuery EasyUI等。本专题为大家提供jquery插件相关的文章、下载、课程内容,供大家免费下载体验。

156

2023.09.12

jquery怎么操作json
jquery怎么操作json

操作的方法有:1、“$.parseJSON(jsonString)”2、“$.getJSON(url, data, success)”;3、“$.each(obj, callback)”;4、“$.ajax()”。更多jquery怎么操作json的详细内容,可以访问本专题下面的文章。

324

2023.10.13

jquery删除元素的方法
jquery删除元素的方法

jquery可以通过.remove() 方法、 .detach() 方法、.empty() 方法、.unwrap() 方法、.replaceWith() 方法、.html('') 方法和.hide() 方法来删除元素。更多关于jquery相关的问题,详情请看本专题下面的文章。php中文网欢迎大家前来学习。

404

2023.11.10

jQuery hover()方法的使用
jQuery hover()方法的使用

hover()是jQuery中一个常用的方法,它用于绑定两个事件处理函数,这两个函数将在鼠标指针进入和离开匹配的元素时执行。想了解更多hover()的相关内容,可以阅读本专题下面的文章。

513

2023.12.04

jquery实现分页方法
jquery实现分页方法

在jQuery中实现分页可以使用插件或者自定义实现。想了解更多jquery分页的相关内容,可以阅读本专题下面的文章。

291

2023.12.06

jquery中隐藏元素是什么
jquery中隐藏元素是什么

jquery中隐藏元素是非常重要的一个概念,在使用jquery隐藏元素之前,需要先了解css样式中关于元素隐藏的属性,比如display、visibility、opacity等属性。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

126

2024.02.23

jquery中什么是高亮显示
jquery中什么是高亮显示

jquery中高亮显示是指对页面搜索关键词时进行高亮显示,其实现办法:1、先获取要高亮显示的行,获取搜索的内容,再遍历整行内容,最后添加高亮颜色;2、使用“jquery highlight”高亮插件。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

180

2024.02.23

jQuery 正则表达式相关教程
jQuery 正则表达式相关教程

本专题整合了jQuery正则表达式相关教程大全,阅读专题下面的文章了解更多详细内容。

50

2026.01.13

batoto漫画官网入口与网页版访问指南
batoto漫画官网入口与网页版访问指南

本专题系统整理batoto漫画官方网站最新可用入口,涵盖最新官网地址、网页版登录页面及防走失访问方式说明,帮助用户快速找到batoto漫画官方平台,稳定在线阅读各类漫画内容。

127

2026.02.25

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
jQuery 教程
jQuery 教程

共42课时 | 6.6万人学习

HTML+CSS基础与实战
HTML+CSS基础与实战

共132课时 | 11.7万人学习

tp6+adminlte搭建通用后台
tp6+adminlte搭建通用后台

共39课时 | 5.9万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号