如何实现点击选项时自动关闭其他展开项的JavaScript交互效果

发布时间 - 2026-02-01 00:00:00    点击率:

本文介绍如何用原生javascript实现“单选式折叠面板”:点击一个选项时,自动收起其他已展开的内容区域,仅保留当前项展开,提升用户体验与界面一致性。

在构建常见 FAQ、手风琴(Accordion)或分步引导类 UI 时,常需确保同一时间仅

有一个内容区块处于展开状态。原始代码中各事件监听器彼此独立,导致多个 .secenek-*-kismi 元素可能同时拥有 showing 类,无法满足“互斥展开”的需求。

核心思路是:每次点击前,先统一收起所有已展开的区块,再对目标区块执行切换逻辑。以下是优化后的完整实现(已去除重复逻辑,增强可维护性):

关键改进点说明:

  • 使用 closeAllSections() 函数抽象公共操作,避免三段重复的 querySelectorAll('.showing') 逻辑;
  • 每次点击先判断目标是否已展开:若已展开则收起(支持“点击收起”),否则先清空其他、再展开目标;
  • 严格调用 e.preventDefault()(注意原代码中漏掉了括号 e.preventDefault() → ❌ e.preventDefault 是无效的);
  • 所有选择器均基于类名,兼容现代浏览器,无需依赖 jQuery。

⚠️ 注意事项:

  • 确保 HTML 中每个 .secenek-* 触发元素与其对应 .secenek-*-kismi 内容块一一匹配且存在;
  • 若后续新增选项(如 .secenek-4),建议改用事件委托 + 数据属性方式(例如 data-target=".secenek-4-kismi"),进一步提升扩展性;
  • CSS 中需定义 .showing 的显示样式(如 display: block; 或配合 max-height 实现过渡动画)。

通过以上结构化处理,即可稳定实现“点击即切换、展开即独占”的交互行为,兼顾功能性、可读性与可维护性。


# css  # javascript  # java  # jquery  # html  # 浏览器  # ssl  # ai  # win  # 委托  # 事件  # 选择器  # display  # ui  # 多个  # 他已  # 绑定  # 如何用  # 清空  # 三段  # 单选  # 有一个  # 再对  # 结构化 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: Laravel如何使用Service Provider注册服务_Laravel服务提供者配置与加载  LinuxShell函数封装方法_脚本复用设计思路【教程】  Laravel模型关联查询教程_Laravel Eloquent一对多关联写法  Laravel Telescope怎么调试_使用Laravel Telescope进行应用监控与调试  Swift中循环语句中的转移语句 break 和 continue  Python高阶函数应用_函数作为参数说明【指导】  Linux系统运维自动化项目教程_Ansible批量管理实战  Laravel如何实现全文搜索_Laravel Scout集成Algolia或Meilisearch教程  网站图片在线制作软件,怎么在图片上做链接?  深圳防火门网站制作公司,深圳中天明防火门怎么编码?  高端网站建设与定制开发一站式解决方案 中企动力  Laravel怎么使用Collection集合方法_Laravel数组操作高级函数pluck与map【手册】  php 三元运算符实例详细介绍  Laravel如何与Pusher实现实时通信?(WebSocket示例)  中国移动官方网站首页入口 中国移动官网网页登录  如何挑选优质建站一级代理提升网站排名?  详解Android中Activity的四大启动模式实验简述  Laravel如何获取当前登录用户信息_Laravel Auth门面使用与Session用户读取【技巧】  Laravel如何使用缓存系统提升性能_Laravel缓存驱动和应用优化方案  高防网站服务器:DDoS防御与BGP线路的AI智能防护方案  网站制作大概多少钱一个,做一个平台网站大概多少钱?  手机网站制作平台,手机靓号代理商怎么制作属于自己的手机靓号网站?  ChatGPT回答中断怎么办 引导AI继续输出完整内容的方法  高配服务器限时抢购:企业级配置与回收服务一站式优惠方案  如何基于云服务器快速搭建网站及云盘系统?  悟空浏览器如何设置小说背景色_悟空浏览器背景色设置【方法】  Laravel用户认证怎么做_Laravel Breeze脚手架快速实现登录注册功能  如何在IIS7上新建站点并设置安全权限?  怎么用AI帮你为初创公司进行市场定位分析?  如何快速上传建站程序避免常见错误?  Laravel Sail是什么_基于Docker的Laravel本地开发环境Sail入门  如何在企业微信快速生成手机电脑官网?  JavaScript如何实现路由_前端路由原理是什么  Win11怎么设置默认图片查看器_Windows11照片应用关联设置  标题:Vue + Vuex 项目中正确使用 JWT 进行身份认证的实践指南  如何正确选择百度移动适配建站域名?  Laravel如何生成PDF或Excel文件_Laravel文档导出工具与使用教程  如何在 React 中条件性地遍历数组并渲染元素  Laravel Livewire是什么_使用Laravel Livewire构建动态前端界面  php做exe能调用系统命令吗_执行cmd指令实现方式【详解】  edge浏览器无法安装扩展 edge浏览器插件安装失败【解决方法】  如何快速生成橙子建站落地页链接?  如何在Windows虚拟主机上快速搭建网站?  JS实现鼠标移上去显示图片或微信二维码  如何用手机制作网站和网页,手机移动端的网站能制作成中英双语的吗?  html如何与html链接_实现多个HTML页面互相链接【互相】  Laravel如何使用Telescope进行调试?(安装和使用教程)  如何在HTML表单中获取用户输入并结合JavaScript动态控制复利计算循环  如何在服务器上配置二级域名建站?  JavaScript如何实现类型判断_typeof和instanceof有什么区别