jquery 如何创建一个在单击按钮时动态分配变量的循环

bttbmeg0  于 2023-06-22  发布在  jQuery
关注(0)|答案(1)|浏览(117)

我试图分配变量的基础上点击按钮。首先我这样做:

$("#dot"+1).click(function(){
        logdot1=true;
});
$("#dot"+2).click(function(){
        logdot2=true;
});
$("#dot"+3).click(function(){
        logdot3=true;
});
....and so on up to 36 times

我想通过循环来最小化这段代码。我该怎么做呢?
我试着这样做:

var logdot;
$("#dot"+i).click(function(){
        this['logdot'+i]=true;
});

但这会使整个剧本停止工作。

7tofc5zh

7tofc5zh1#

你的this可能不是你想的那样。
给予每个点一个dotClass类。
const dotsClicked = [];
并使用委托(假设点是同一容器中的兄弟)
在jQuery和vanilla JS中都不需要循环来实现这一点。
你可以委托给vanilla JS中的一个通用容器

// test data
$('#dots').html(Array.from({ length: 36 })
  .map((_, i) => `<div class="dot"></div>`).join('') // vanilla JS map
);

let dotsClicked = $('.dot').map(function() {
  return this.matches('.dotClicked')
}).get(); // jQuery map using vanilla JS matches

$('.dot').on('click', function() {
  $(this).toggleClass('dotClicked');
  dotsClicked[$(this).index()] = $(this).is('.dotClicked');
  console.log(dotsClicked);
})
#dots {
  display: flex;
  gap: 10px;
  flex-direction: row;
  flex-wrap: wrap;
  width: 130px;
  border: 1px solid black;
  padding: 10px;
}

.dot {
  font-size: 35px;
}

.dot:hover {
  color: red;
}

.dot::before {
  content: "•"
}

.dotClicked {
  color: red;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.7.0/jquery.min.js"></script>
<div id="dots">
</div>

相关问题