返回信息流function bgli(){
var tbg = document.getElementById("themeBackground");
var ull = tbg.appendChild(document.createElement("ul"));
for(var i=0;i<10;i++){
var lii =document.createElement("li");
lii.setAttribute("class","lii");
var imgs = document.createElement("img");
imgs.setAttribute("src","../css/image/preview"+i+".png");
imgs.onclick = function(){document.body.style.backgroundImage = "url(../css/image/bgg"+i+".jpg)"};
lii.appendChild(imgs);
ull.appendChild(lii);
}
};
window.onload=bgli;以上代码想实现一个功能,就是点击每张图片是,背景设置为相应的图片,for循环的i要与backgroundImage图片url中的i为相同,但是这么写,我发现url(../css/image/bgg"+i+".jpg)中的i始终为10,这个怎么解决呢
这是一条镜像帖。来源:北邮人论坛 / www-technology / #17007同步于 2012/8/11
该镜像源已超过 30 天没有更新,可能在源站已被删除。
WWWTechnology机器人发帖
[讨论][问题]虚心请教大家一个问题
byrcjh
2012/8/11镜像同步8 回复
订阅后,新回复会通过你的通知中心匿名送达。
8 条回复
你写的是一个click事件,也就是每次点击的时候才能触发
所以每次加载的流程是进入函数,走for循环直到i=10循环结束,这个应该是一瞬间的事,然后点击触发动作,所以i=10
你好,我想问一个问题,就是我设置了另外一个全局变量k,具体代码如下:
function bgli(){
var tbg = document.getElementById("themeBackground");
// var ull = document.createElement("ul");
var ull = tbg.appendChild(document.createElement("ul"));
var i,k=0;
for(i=0;i<10;i++){
var lii =document.createElement("li");
lii.setAttribute("class","lii");
var imgs = document.createElement("img");
imgs.setAttribute("src","../css/image/preview"+i+".png");
lii.appendChild(imgs);
ull.appendChild(lii);
}
var imgss = document.getElementsByTagName("li");
for(i=0;i<imgss.length-2;i++){
imgss[i].firstChild.onclick = function(){
document.body.style.backgroundImage = "url(../css/image/bgg"+k+".jpg)";
if(k<imgss.length){k++;}else{k=0;}
};
}
};
window.onload=bgli;
这样的话,可以设置背景图片了,但是怎么和img标签的缩略图相对应呢,也就是希望每次k与i相等,但是发现用alert测试i每次都是10,这个可以处理吗,或许我的思路不是太对?
【 在 H7 的大作中提到: 】
: 你写的是一个click事件,也就是每次点击的时候才能触发
: 所以每次加载的流程是进入函数,走for循环直到i=10循环结束,这个应该是一瞬间的事,然后点击触发动作,所以i=10
因为你最后那个for(i=0;i<imgss.length-2;i++) 循环 中间有个onclick事件,这个事件是绑定在元素上的,如果你不点击鼠标是不会自动触发的,而for循环瞬间就结束了,所以等你点的时候i早就变成10了,这么写onclick事件思路是有问题的
如果 用imgs.setAttribute("new_attr",i);给缩略图设置一个新的属性 然后点击缩略图的时候获取这个属性getAttribute("new_attr");也就是i的值,然后 设置相应的背景,你看下行不
嗯,这个方法挺好的,谢谢哈
【 在 H7 的大作中提到: 】
: 如果 用imgs.setAttribute("new_attr",i);给缩略图设置一个新的属性 然后点击缩略图的时候获取这个属性getAttribute("new_attr");也就是i的值,然后 设置相应的背景,你看下行不
看来你对闭包不太熟悉呀,学好js闭包是关键呀。
imgs.onclick = function(){
var i_ = i;
return function(){document.body.style.backgroundImage = "url(../css/image/bgg"+i_+".jpg)"};
}();
【 在 byrcjh 的大作中提到: 】
: function bgli(){
: var tbg = document.getElementById("themeBackground");
: var ull = tbg.appendChild(document.createElement("ul"));
: ...................