直接上代码吧:var gallery = document.getElementById("faceDefaultList");
var links = gallery.getElementsByTagName("li");
for(var i = 0; i < links.length; i++){
links[i].onclick = function(){
var source = "face/" + links[i] + ".gif"
placeholder.setAttribute("src",source);
return false;
}
}
我的本意是:
通过改变placeholder的src值来达到更改图片的效果!但问题就,为什么我得到的那个src的值总是undefined呢?是不是我要转换那个for里面的参数呢?求指教!!!

解决方案 »

  1.   

    楼主先了解一下什么是闭包。
    var gallery = document.getElementById("faceDefaultList");
    var links = gallery.getElementsByTagName("li");
    for(var i = 0; i < links.length; i++){    
        links[i].onclick = (function(index){
            return function(){
                var source = "face/" + index + ".gif"
                placeholder.setAttribute("src", source);
                return false;
            }
        })(i);
    }另外links[i]是dom对象加到字符串里你期望是什么?
      

  2.   

    先alert(source)看看有没有值?placeholder是个什么东东?
      

  3.   

    其实我的目的非常简单,通过改变src值来达到图片更换的目的!
    上面的描述可能是我说错了,我希望得到的是这样的结果:
    links[0] = 0;
    links[1] = 1;
    links[2] = 2;
    links[3] = 3;
    ......
    以此类推,一开始我以为通过links[i]就能获得相应的数字,但后来想想,原来我错了,因为links[i]只是获取到了数组的值,而且,我并没有定义数组的每一项的值,所以才会获得undefined;关于闭包的问题,我刚才又看了一下《JavaScript高级程度设计》这本书,里面的很多东西,自己并没有理解过来!因为自己刚刚开始学习javascript。买的第一本书便是《JavaScript高级程度设计》,后来感觉看不懂,便买了《JavaScript DOM 编程艺术》这本书来看一会;上面的的例子,是自己看书时,练习的一个小demo至于2楼提到的问题,其实我在links[i].onclick = function(){}这里一开始就已经用alert()这个方法测试过的了,现在我只要得到上面提到的links[0] = 0;......便可!!placeholder呢,也是一个变量,可能代码里面没有贴全吧:
    var placeholder = document.getElementById("placeholder");
    var gallery = document.getElementById("faceDefaultList");
    var links = gallery.getElementsByTagName("li");
    for(var i = 0; i < links.length; i++){    
        links[i].onclick = function(){
            var source = "face/" + links[i] + ".gif"
            placeholder.setAttribute("src",source);
            return false;
        }    
    }
      

  4.   

    var placeholder = document.getElementById("placeholder");
    var gallery = document.getElementById("faceDefaultList");
    var links = gallery.getElementsByTagName("li");
    for(var i = 0; i < links.length; i++){  
      links[i].index = i;
        links[i].onclick = function(){
            var source = "face/" + this.index  + ".gif"
            placeholder.setAttribute("src",source);
            return false;
        }    
    }