做项目的时候遇到一个问题。
在我的php里面有一个div一直不间断地自左向右滚动着多张小图,我js文件里要做到的效果是一旦点击其中一个小图就把这个小图放大。
于是我在一个循环里给这二十个小图设置监听。一旦被触发点击函数,那么程序需要知道是哪个小图被点击了,所以我需要传递一个参数(i)来告知程序哪一个小图被点了(代码中的pics数组存储的是在页面中通过getElementsByTagName获得的20张小图,这段代码在window.onload里面被调用):
for(var i=0;i<20;i++)
{
pics[i].οnclick=function()
{
alert(i);
};
};
如上。问题却出现了——明眼人可能很快看出来这样做的结果就是,无论点击哪张小图,alert出来的都是20,而不是被点中的小图的序号。这是因为在window.onload里面从一开始就调用了这块循环,变量 i 理所当然地跟着循环递增到了20。而当监听函数被触发(小图被点击),这个时候alert出来的 i 当然就是20。
后来找到网友给出的回答:
for(var i=0;i<20;i++)
{
var paraTrans=function(i)
{
pics[i].onclick = function()
{
alert(i);
}
};
paraTrans(i);
}
这样就解决了问题。