本文介绍一种不依赖动态 id 的现代表单设计方法,通过 `
在前端开发中,为表单动态添加控件时,若过度依赖 id 属性 + 字符串拼接 + 内联 onclick,极易陷入 ID 冲突、作用域丢失、闭包捕获错误值 等经典陷阱——正如你遇到的:counter 显示为 5,但点击所有新下拉项却始终只修改 dropdownButton2。根本原因在于:createDropdownItem 中的 onclick 回调函数形成了闭包,但该闭包引用的是外部变量 buttonId 的最终值(即最后一次循环赋值的结果),而非每次调用时的独立快照;更严重的是,bootstrap 的 dropdown-toggle 按钮本身并不原生支持“文本回填”,需手动绑定事件,而动态生成的 dom 节点若未正确关联上下文,就会出现目标错位。
✅ 推荐解法:放弃手动拼接 ID 和内联事件,改用语义化、结构化、无状态的表单设计:
以下是可直接运行的完整实现:
Modifier Modifier Public Private Protected Attribute Name Value (optional) Modifier Modifier Public Private Protected Attribute Name Value (optional) + Tambah Atribut Kirim Data
? 关键优势说明:
⚠️ 注意事项:
这种设计不仅解决了你的当前问题,更将代码从“手动 DOM 操作脚本”升级为“声明式表单架构”,显著降低维护成本与出错概率。
如何用正则表达式匹配包含“olo”但不以或不以“olo”开头/结尾的单词
css相对定位与动画结合使用技巧_结合top left实现位移动画