<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>休闲网登陆页面</title>
<style type="text/css">
* {
margin:0px;
padding:0px;
}
ul {
margin-left:580px;
}
li {
list-style-type:none;
float:left;
background:#090;
font-size:22px;
width:120px;
border:1px solid white;
}
p {
border:2px solid white;
}
</style>
<script>
function test(){
var lis=document.getElementsByTagName("li");
var mydiv=document.getElementsByTagName("div");
for(var i=0;i<lis.length;i++){
lis[i].onmouseover=function(){
            //alert(i);当鼠标停在li上时显示的数字为3
//alert(mydiv[i]);当鼠标停在li上时显示为undefined
mydiv[i].style.display="block";
}
lis[i].onmouseout=function(){
mydiv[i].style.display="none";
}
}
}
window.onload=test;</script>
</head>
<body>
<ul>
  <li>手机数码
    <div style="display:none;">
      <p>手机数码1</p>
      <p>手机数码2</p>
      <p>手机数码3</p>
    </div>
  </li>
  <li>淘宝集市
    <div style="display:none;">
      <p>淘宝集市1</p>
      <p>淘宝集市2</p>
      <p>淘宝集市3</p>
    </div>
  </li>
  <li>品牌商城
    <div style="display:none;">
      <p>品牌商城1</p>
      <p>品牌商城2</p>
      <p>品牌商城3</p>
    </div>
  </li>
</ul>
</body>
</html>我想当鼠标停在li上的时候,显示对应的二级菜单,但是,现在停上去没有反应,我试着调试了下,当我加上alert(i);当鼠标停在li上时显示的数字为3,alert(mydiv[i]);当鼠标停在li上时显示为undefined,就是说只要触发到onmouseover事件时 i的值就已经是3了,但是我的代码中i是跟外层循环一起变化的呀,这到底是怎么一回事?

解决方案 »

  1.   

    你做外层循环时i值还在变化,循环结束后  i 最后的值为=lis.length, 
    当触发事件时取的 i 是最后的值<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <title>休闲网登陆页面</title>
    <style type="text/css">
    * {
    margin:0px;
    padding:0px;
    }
    ul {
    margin-left:580px;
    }
    li {
    list-style-type:none;
    float:left;
    background:#090;
    font-size:22px;
    width:120px;
    border:1px solid white;
    }
    p {
    border:2px solid white;
    }
    </style>
    <script>
    function test(){
    var lis=document.getElementsByTagName("li");
    var mydiv=document.getElementsByTagName("div");
    for(var i=0;i<lis.length;i++){
    lis[i].i=i;
    lis[i].onmouseover=function(){
                //alert(i);当鼠标停在li上时显示的数字为3
    //alert(mydiv[i]);当鼠标停在li上时显示为undefined
    mydiv[this.i].style.display="block";
    }
    lis[i].onmouseout=function(){
    mydiv[this.i].style.display="none";
    }
    }
    }
    window.onload=test;</script>
    </head>
    <body>
    <ul>
      <li>手机数码
        <div style="display:none;">
          <p>手机数码1</p>
          <p>手机数码2</p>
          <p>手机数码3</p>
        </div>
      </li>
      <li>淘宝集市
        <div style="display:none;">
          <p>淘宝集市1</p>
          <p>淘宝集市2</p>
          <p>淘宝集市3</p>
        </div>
      </li>
      <li>品牌商城
        <div style="display:none;">
          <p>品牌商城1</p>
          <p>品牌商城2</p>
          <p>品牌商城3</p>
        </div>
      </li>
    </ul>
    </body>
    </html>
      

  2.   

    嗯,问题是解决了,可是我觉得在执行window.onload=test;的时候当执行到lis[i].onmouseover=function(){}时function里面的内容并没有执行(事件没有绑定成功),难道在编译时function()没有编译到?
      

  3.   

    lis[i].onmouseover=function(){}时
    只是一个赋值名句,你可以把 function(){} 看成是个 Function类型变量,只是赋值 没有执行