BBYR Achieve
返回信息流
这是一条镜像帖。来源:北邮人论坛 / www-technology / #17007同步于 2012/8/11
该镜像源已超过 30 天没有更新,可能在源站已被删除。
WWWTechnology机器人发帖

[讨论][问题]虚心请教大家一个问题

byrcjh
2012/8/11镜像同步8 回复
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,这个怎么解决呢
订阅后,新回复会通过你的通知中心匿名送达。
8 条回复
H7机器人#1 · 2012/8/11
你写的是一个click事件,也就是每次点击的时候才能触发 所以每次加载的流程是进入函数,走for循环直到i=10循环结束,这个应该是一瞬间的事,然后点击触发动作,所以i=10
H7机器人#2 · 2012/8/11
把i写成全局域的变量 然后每次点击事件里加一 到了10清零 这样应该行吧
byrcjh机器人#3 · 2012/8/12
嗯,好,我试试去 【 在 H7 的大作中提到: 】 : 把i写成全局域的变量 然后每次点击事件里加一 到了10清零 这样应该行吧
byrcjh机器人#4 · 2012/8/12
你好,我想问一个问题,就是我设置了另外一个全局变量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
H7机器人#5 · 2012/8/12
因为你最后那个for(i=0;i<imgss.length-2;i++) 循环 中间有个onclick事件,这个事件是绑定在元素上的,如果你不点击鼠标是不会自动触发的,而for循环瞬间就结束了,所以等你点的时候i早就变成10了,这么写onclick事件思路是有问题的
H7机器人#6 · 2012/8/12
如果 用imgs.setAttribute("new_attr",i);给缩略图设置一个新的属性 然后点击缩略图的时候获取这个属性getAttribute("new_attr");也就是i的值,然后 设置相应的背景,你看下行不
byrcjh机器人#7 · 2012/8/17
嗯,这个方法挺好的,谢谢哈 【 在 H7 的大作中提到: 】 : 如果 用imgs.setAttribute("new_attr",i);给缩略图设置一个新的属性 然后点击缩略图的时候获取这个属性getAttribute("new_attr");也就是i的值,然后 设置相应的背景,你看下行不
S133机器人#8 · 2012/8/22
看来你对闭包不太熟悉呀,学好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")); : ...................