如何通过循环实现点击按钮时动态为变量赋值?
解决方案
首先你的尝试存在几个问题:
- 缺少循环结构,变量
i未定义,导致无法匹配到任何元素 - 回调里的
this指向被点击的DOM元素,不是全局作用域,所以无法给全局的logdotN变量赋值 - 就算补上循环,用
var声明i会因变量提升导致所有回调共用同一个i,触发时i已经是37,所有操作都会指向logdot37
下面是几种可行的精简写法:
方法1:ES6+ 块级作用域(推荐)
利用let在循环中的块级绑定特性,每次迭代都会创建独立的i值:
for (let i = 1; i <= 36; i++) { $(`#dot${i}`).click(function() { window[`logdot${i}`] = true; }); }
如果logdotN不是全局变量,把window换成对应的作用域对象即可。
方法2:闭包兼容旧环境
如果需要兼容不支持ES6的环境,用立即执行函数保存当前循环的数值:
for (var i = 1; i <= 36; i++) { (function(num) { $(`#dot${num}`).click(function() { window[`logdot${num}`] = true; }); })(i); }
方法3:统一绑定(更简洁)
不用循环,直接给所有id以dot开头的元素绑定事件,通过元素id提取索引:
$('[id^="dot"]').click(function() { const dotNum = this.id.replace('dot', ''); window[`logdot${dotNum}`] = true; });
如果给每个dot元素添加data-index属性(比如<div id="dot1" data-index="1"></div>),还可以更直观地获取索引:
$('[id^="dot"]').click(function() { const dotNum = $(this).data('index'); window[`logdot${dotNum}`] = true; });
内容的提问来源于stack exchange,提问作者Forest Fire 7
相关产品推荐
相关产品推荐

