没错就是传说中的必包
<html>  
<body>
    <div class="div1">
        this is first div
    </div>
    <div class="div2">
        this is second div
    </div>
    <div class="div3">
        this is third div
    </div>
    </body>
</html>
<script>
    var allDiv = document.getElementsByTagName("div");
    for(var a = 0;a < allDiv.length; a++){
        var div = allDiv[a];
        div.onclick = function(){
            alert(this.innerHTML);
        }
    }
</script>

解决方案 »

  1.   

    你相当于给每个div绑定了个
    onclick="alert(div.innerHTML);"而div最后保存的是allDiv[2]
      

  2.   

    谢谢你的答复.
    我试过你说的方法了,已经可以了.
    想问一下,你说的代码中,this指的是什么?
    是事件的那个e么?
    为什么this可以代表触发事件的元素?
      

  3.   

    闭包很好用的,但是没有那么难理解拉,就是作用域的问题而已,还有this指的是调用函数的对象,对于on..绑定的事件来说,就是事件绑定的元素你可以看看以下文章,虽然没有讲到闭包,但是可以解决你第一个疑问:
    http://blog.csdn.net/hzrui/archive/2009/02/27/3941137.aspx下面这个可以解决你this的疑问:
    http://blog.csdn.net/hzrui/archive/2009/03/03/3951289.aspx
      

  4.   

    以我的水平很难解释清楚这些,谈下自己的看法。    在解释之前有几个关于JS的常识需要声明下。首先在JS中任何一个对象都是从属于某一个对象的,
    也就是说任何一个变量或函数都是有主的,不属于任何对象的变量或函数不存在;其次JS是一个解释
    性语言,没一段程序在执行之前需要由解释程序预处理。预处理之后源代码会被转化成解释机可识别
    的内部代码,这些代码的逻辑功能和你的代码是等价的,用来描述你的逻辑。在代码预处理之后,解释
    程序还会给没一函数分配一部分可用的内存空间作为函数的执行环境也就是必包。程序=算法+数据.
    预处理代码描述逻辑,必包存放数据,有了这两者我们的程序就可以运行了。    好了有了上面的铺垫,我们解释问题就比较容易了。由于JS解释后会被分解成内部的算法描述符+
    必包。解释规则是一样的,所以同一函数无论什么时候算法描述符都是一样的,但必包就不一定了,不同
    的环境下他的值是不一样的。之所以this可以代表触发事件的元素,就是因为在当时的必包this就指向
    触发时间的元素。你可以试验下下面的代码,看看那个this有什么不一样
    <html>  
    <body>
        <div id="div1" class="div1">
            this is first div
        </div>
        <div id="div2" class="div2">
            this is second div
        </div>
        <div class="div3">
            this is third div
        </div>
        <input id="btn1" type="button" value="ceshi" onClick="alert(this.onclick);handleClk.apply(this,[])"/>
    </body>
    </html>
    <script>
    function $(sId){
    return document.getElementById(sId);
    }var allDiv = document.getElementsByTagName("div");
    for(var a = 0;a < allDiv.length;a++){
    var div = allDiv[a];
    div.onclick=handleClk;
    }var value="window value";
    function handleClk(){
    alert(this);//这个this的值根据环境的不同会有所变化
    alert(this.innerHTML||this.value);
    }handleClk();
    </script>    小时候经常听大人们将那些部分环境照人学舌的笑话,程序也一样,算法是死的,环境是活的,分析
    程序不能按死标准    
      

  5.   

    感谢hzrui,星期六的黄昏.
    看了你们的回复我明白一点了,谢谢你们.