为了账号安全,请及时绑定邮箱和手机立即绑定

在for循环中分配单击处理程序

在for循环中分配单击处理程序

炎炎设计 2019-06-19 19:48:38
在for循环中分配单击处理程序我有几个div‘s#mydiv1, #mydiv2, #mydiv3.。并希望将单击处理程序分配给它们:$(document).ready(function(){   for(var i = 0; i < 20; i++) {     $('#question' + i).click( function(){       alert('you clicked ' + i);     });   }});但是没有表现出来'you clicked 3'当点击#mydiv3(至于每一次点击)我得到'you clicked 20'..我做错什么了?
查看完整描述

3 回答

?
大话西游666

TA贡献1817条经验 获得超14个赞

这是一个常见的错误循环闭包在Javascript里。您需要像这样的回调函数:

function createCallback( i ){
  return function(){
    alert('you clicked' + i);
  }}$(document).ready(function(){
  for(var i = 0; i < 20; i++) {
    $('#question' + i).click( createCallback( i ) );
  }});

2016年6月3日:由于这个问题仍然有一些牵引力和ES6也是流行的,我建议一个现代的解决方案。如果编写ES6,则可以使用let关键字,这使得i变量是循环的局部变量,而不是全局变量:

for(let i = 0; i < 20; i++) {
  $('#question' + i).click( function(){
    alert('you clicked ' + i);
  });}

它更短更容易理解。


查看完整回答
反对 回复 2019-06-19
?
翻翻过去那场雪

TA贡献2065条经验 获得超14个赞

为了澄清,我等于20,因为单击事件在循环完成后才会触发。


查看完整回答
反对 回复 2019-06-19
  • 3 回答
  • 0 关注
  • 425 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信