You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过循环实现点击按钮时动态为变量赋值?

解决方案

首先你的尝试存在几个问题:

  • 缺少循环结构,变量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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.19 04:05:06