循环事件事件监听

这几天在做一个效果,需要用到点击图片得到其下标位置去对他执行,搞了几天都没搞清楚。

在今天下午实在不想想了,就去百度了下,才发现百度果然是强大的!


循环中设置的监听事件怎么传递参数

2014-05-07 22:16 Pie_lin  |  浏览 224 次
在我的php里面有一个div一直不间断的滚动着多张小图,我js文件里要的效果是一旦点击其中一个小图就把这个小图放大。
现在我用的是一个循环来给这十多个小图设置监听,但是监听无法让程序知道是哪一个小图被点击了:
 for(var i=0;i<20;i++)
  {        
    pics[i].οnclick=function(){alert("what is the number of the picture you clicked just now? "+i);};
   };
如上,这样一来一旦点击某张小图,alert出来的肯定是20,而不是被点中的小图的序号。我知道这是因为点击事件的监听被触发时i已经是在前面循环里就被自动加到20了。但就是不知道该如何解决。
已经找到解决的办法了,据网友表示这是叫做“闭包”:
 for(var i=0;i<pics.length;i++)
 {  
  var paraTrans=function(i)
  {
   pics[i].onclick = function()
   {
    alert(i)
   }
  };
  paraTrans(i);
 }


这是根据一个网友遇到了同样的问题所给出的答案

附上大神的详细解说

参数是按值传递的,闭包函数有自己受保护的变量空间
每次循环,等于创建了一个新的函数,每个函数都有自己独立的作用域
每个作用域里都有一个复制过来的i,所以……
 
问题链接:http://zhidao.baidu.com/link?url=T9od33JuA7jjxzfyV-wOjuVLSNUaqpc9aoCu2HjfYfHBuRLW1CNDii0Bh9uvG6h-a2ZQlpLytZAs0vvul93bxP9jBrGCXzq-v959pQEizOe

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值