导航
电话
咨询
地图
顶部
本文讲解如何在动态生成多个 select 元素时,实现每个标签独立点击展开/收起对应下拉框,避免 id 重复导致的事件绑定失效及多次触发问题。
在使用 jQuery 动态渲染表单组件(如 )时,一个常见误区是为多个元素分配相同 id(例如 id="atb11" 和 id="atbb22"),这不仅违反 HTML 规范(ID 必须唯一),还会导致 $('#atb11').on('click', ...) 仅作用于第一个匹配元素,其余无法响应。
要实现「逐个控制」——即点击某个「Ajudante」标签,只切换其紧邻的 容器,关键在于两点:
✅ 唯一标识符:为每个动态生成的 和 添加基于索引的唯一 ID,例如 atb11-0、atbb22-0、atb11-1、atbb22-1…… ✅ 事件委托 + 精确目标定位:使用 $(document).on('click', '#atb11-'+x, ...) 绑定事件,并通过 $(this).next() 精准获取相邻的 容器,而非全局查找 #atbb22。以下是优化后的核心逻辑(含关键注释):$(document).on('click', '.dad-pagamento', function() { var linha = ''; for (var x = 0; x < data.length; x++) { linha += ` Ajudante ${data[x].Id} `; } // 一次性写入全部 HTML(注意:原代码中 .html(linha) 在循环内执行,会导致重复覆盖,应移出循环) $(".pagmfalta").html(linha); $('#minhaDiv1').show(); // 初始化所有 select2 实例 $(".singlet").select2({ placeholder: "Selecione Ajudante", allowClear: true, width: '100%' }); // 为每个 label 绑定独立事件(使用事件委托,支持动态元素) for (var x = 0; x < data.length; x++) { $(document).on('click', '#atb11-' + x, function(e) { e.stopImmediatePropagation(); // 阻止其他同级事件处理器执行,防止重复绑定引发多倍触发 $(this).next('div[id^="atbb22-"]').slideToggle('slow'); // 精准匹配下一个 div(推荐用属性选择器增强健壮性) }); } });⚠️ 重要注意事项: 避免循环内重复 .html():原代码在 for 循环中反复调用 $(".pagmfalta").html(linha),每次都会覆盖前一次内容,最终只保留最后一个 。务必把拼接完成的完整 linha 在循环外一次性写入。 stopImmediatePropagation() 不可少:若多次点击「Consultar」按钮,会重复为同一 ID 绑定 click 事件,导致点击一次触发多次 slideToggle。该方法确保当前 handler 执行后立即终止后续同类型事件传播。 推荐使用更健壮的选择器:$(this).next() 依赖 DOM 结构严格相邻;若结构可能变化,建议改用 $(this).closest('.col-3').find('> div[id^="atbb22-"]') 或添加统一类名(如 class="toggle-target")进行定位。 Select2 初始化时机:必须在 插入 DOM 后调用 .select2(),且不要对已初始化的元素重复调用(否则报错)。当前逻辑安全,因每次点击都重建整个列表。 总结:动态表单交互的核心是「唯一性 + 委托 + 精准定位」。通过索引化 ID、事件委托绑定、stopImmediatePropagation 控制执行流,并配合语义清晰的 DOM 关系查找,即可优雅实现任意数量 Select 的独立显隐控制。
以下是优化后的核心逻辑(含关键注释):
$(document).on('click', '.dad-pagamento', function() { var linha = ''; for (var x = 0; x < data.length; x++) { linha += ` Ajudante ${data[x].Id} `; } // 一次性写入全部 HTML(注意:原代码中 .html(linha) 在循环内执行,会导致重复覆盖,应移出循环) $(".pagmfalta").html(linha); $('#minhaDiv1').show(); // 初始化所有 select2 实例 $(".singlet").select2({ placeholder: "Selecione Ajudante", allowClear: true, width: '100%' }); // 为每个 label 绑定独立事件(使用事件委托,支持动态元素) for (var x = 0; x < data.length; x++) { $(document).on('click', '#atb11-' + x, function(e) { e.stopImmediatePropagation(); // 阻止其他同级事件处理器执行,防止重复绑定引发多倍触发 $(this).next('div[id^="atbb22-"]').slideToggle('slow'); // 精准匹配下一个 div(推荐用属性选择器增强健壮性) }); } });
⚠️ 重要注意事项:
总结:动态表单交互的核心是「唯一性 + 委托 + 精准定位」。通过索引化 ID、事件委托绑定、stopImmediatePropagation 控制执行流,并配合语义清晰的 DOM 关系查找,即可优雅实现任意数量 Select 的独立显隐控制。
# html # js # for # 循环 # 处理器 # 多个 # 委托 # 而非 # 事件 # 绑定 # 还会 # class # 推荐使用 # 报错 # this # 表单 # select # 选择器 # 第一个 # 要对 # dom # 标识符 # jquery # 属性选择器
相关栏目: 【 行业资讯 】 【 网络运营 】 【 GEO优化 】 【 营销推广 】 【 SEO优化 】 【 技术教程 】 【 代码知识 】 【 AI推广 】
相关推荐: mac怎么查看wifi密码_MAC查看已连接WiFi密码方法【技巧】 Python数据挖掘进阶教程_分类回归与聚类案例解析 windows系统如何安装cab更新补丁_windows手动安装更新包教程 Windows10如何更改任务栏高度_Win10解除锁定调整大小 C++中的协变与逆变是什么?C++函数指针与返回类型详解【类型系统】 TestNG的testng.xml配置文件怎么写 LINUX怎么进行文本内容搜索_Linux grep命令正则表达式用法大全【教程】 Win11怎么关闭自动更新 Win11永久关闭系统更新的有效方法【技巧】 c# F# 的 MailboxProcessor 和 C# 的 Actor 模型 php在Linux怎么部署_LNMP环境搭建PHP服务的详细指南【指南】 Win10怎样安装PPT模板_Win10安装PPT模板教程【步骤】 Win11怎么关闭系统透明度_Windows11个性化颜色透明效果 Win10系统字体模糊怎么办_Windows10高级缩放设置修复 如何在Golang中实现文件下载_Golang文件传输与内容类型处理方法 如何有效拦截拼接式恶意域名的垃圾信息 如何使用Golang实现负载均衡_分发请求到多个服务节点 如何正确访问 Laravel 模型或对象的属性而非调用不存在的方法 php订单日志怎么在swoole写_php协程swoole写订单日志教程【教程】 Windows蓝屏错误0x0000001E怎么修复_KMODEEXCEPTIONNOTHANDLED排查 Win11怎么忘记WiFi网络_Win11删除已保存无线连接【教程】 LINUX如何查看文件类型_Linux中file命令的识别与应用 PHP接收参数长度超限怎么办_修改postmaxsize设置教程【解答】 Windows驱动兼容性检查方法_避免安装错误版本的策略 Win10如何设置双wan路由器 Win10双wan路由器设置方法【指南】 Win10如何关闭安全中心所有通知 Win10禁用Windows Defender提醒【设置】 php能跑在stm32上吗_php在stm32微控制器上的移植方法【介绍】 GML (Geography Markup Language)是什么,它如何用XML来表示地理空间信息? 如何使用Golang配置安全开发环境_防止敏感信息泄露 Win11系统更新失败怎么办 Win11系统更新失败解决法【步骤】 Mac怎么查看活动监视器_理解Mac进程和资源占用【指南】 Win10如何更改网络连接_Windows10以太网属性IP配置 C++友元类使用场景_C++类间协作设计方式讲解 Win11如何卸载OneDrive_Win11卸载OneDrive方法【教程】 Python邮件系统自动化教程_批量发送解析与模板应用 Win11怎么关闭开机声音_Win11系统启动提示音静音【教程】 windows 10专注助手怎么关闭_windows 10禁用通知提醒功能方法 Windows如何使用注册表查找和删除项?(regedit教程) 如何在Golang中处理JSON字段缺失_Golangjson解析字段校验方法 Win11怎么激活Windows10_Win11激活Win10系统方法【步骤】 Win11文件扩展名怎么显示 Win11查看文件后缀名设置【步骤】 如何在Windows中创建新的用户账户?(标准与管理员) 如何提升Golang JSON序列化性能_Golang JSON编码效率优化方法 Win10电脑怎么设置IP地址_Windows10网络属性固定IP配置 Mac如何彻底清理浏览器缓存?(Safari与Chrome) Win11怎么禁用键盘自带键盘_Win11笔记本禁用内置键盘方法【教程】 Windows10如何更改开机密码_Win10登录选项更改密码教程 Windows驱动无法加载错误解决方法_驱动签名验证失败处理步骤 Windows10系统怎么查看显卡驱动_Win10设备管理器驱动更新 Mac怎么进行语音输入_Mac听写功能设置与使用【教程】 php转mp4怎么设置帧率_调整php生成mp4视频帧率说明【说明】
赣ICP备2024031479号