日期:2014-05-16  浏览次数:20404 次

请教Javascript关于onmouseover事件的问题
HTML code

<html>
<head>
    <title>test</title>
    <style>
        ul li{
            float:left;    
        }
    </style>
</head>
<body>
    <ul id="myul">
        <li>1</li>
        <li>2</li>
        <li>3</li>
        <li>4</li>
    </ul>
    <script language="javascript">
        var nodes = this.myul.childNodes;
        for (var i = 0 ; i < nodes.length ; i++ ){
            var node = nodes[i];
            node.onmouseover = function() {
                node.style.backgroundColor = "red";
            }
        }
    </script>
</body>
</html>


问题说明:
本人想实现,当鼠标移到一个li元素的时候,实现背景变色。于是自己写了上面的代码,运行的时候发现不论怎么鼠标移动到哪个li上都是最后一个li变色。

我知道在有的别的实现发现方法,自己也写了一段比较臃肿的代码实现了这个功能。如下
var nodes = this.myul,childNodes;
nodes[0].onmouseover = function() {
  node.style.backgroundColor = "red";
}
nodes[0].onmouseout = function() {
  node.style.backgroundColor = "white";
}
....

我想知道为什么通过循环这种方式不行,难道事件不能储存么?
麻烦哪位朋友给个解释下,有解决方法更好了,谢谢大家。


------解决方案--------------------
JScript code
        var nodes = this.myul.childNodes;
        for (var i = 0 ; i < nodes.length ; i++ ){
            var node = nodes[i];
            node.onmouseover = function() {
                this.style.backgroundColor = "red";
            }
            node.onmouseout = function() {
                this.style.backgroundColor = "transparent";
            }
        }