这几天在做一个效果,需要用到点击图片得到其下标位置去对他执行,搞了几天都没搞清楚。
在今天下午实在不想想了,就去百度了下,才发现百度果然是强大的!
在我的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