for(i = 0; i < list.length; i++) {
list[i].addEventListener ? list[i].addEventListener("mouseover",function(){list[i].className = "menuHover"}, false) : list[i].attachEvent("onmouseover", function(){list[i].className = "menuHover"});
}
list是用document.getElementsByTagName("li")取得的。但是这样结果确不对请问是什么问题?

解决方案 »

  1.   

    document.getElementsByTagName("li")取得的会是数组吗?
      

  2.   

    每次都是最后一个改变样式吗?
    试试:"mouseover",function(){this.className =
      

  3.   

    嗯,谢谢! 每次都是只改变中间的那一个li元素的样式,而且总是那一个。this我早上在网上搜了下说大义是说W3C的标准没有定义this,this只是各个浏览器自身的实现什么的。会不会有浏览器不兼容啊
      

  4.   

    不过我改成this确实好用了。。
      

  5.   


    还请告诉我一下,为什么我之前那样写会每次都改变那一个li的样式,我鼠标指到其它li的时候那个li的样式也改了,证明监听是成功添加到每一个li元素,只是他改变的为什么会是中间那一个呢?
      

  6.   

    当你鼠标滑过时,才会执行function(),这时候的i已经是循环结束后的值了。
      

  7.   


    噢,谢谢再问下就是用this我找了下早上看见的。“通过addEventListener添加的函数中的this,标准中并没有规定this必须指向目标元素, 尽管大多数浏览器都是这么实现的,但最终还是取决于浏览器的实现,我们需要用到目标元素的时候请调用event.currentTarget.” http://blog.csdn.net/ajaxuser/article/details/5858135你能帮我解释下这句的意思吗 ?
      

  8.   

    个人理解:
    这个function中的this指的是响应mouseover事件的页面元素。如果不想用this的话,试试用return function这种方式传递参数"mouseover",(function(obj){
      return function(){
        obj.className = "menuHover";
      }
    })(list[i])
      

  9.   

    还有我想了个办法,直接var e = list[i],然后用e嘿嘿这样就行了。