js进阶篇最后的编程挑战为什么运行不了

来源:10-1 编程挑战

土豪码农

2016-11-13 22:11

本来是已经完成的了,完成后觉得可以简单一点,于是就换了一些js代码。

var p =document.getElementsByTagName("p");

    var li=document.getElementsByTagName("li");

    

    for(var i=0;i<3;i++){

        li[i].onmouseover=function(){

        p[i].style.display="block";

        li[i].style.borderTop="2px red solid";

        li[i].style.borderBottom="2px white solid";

        }

        li[i].onmouseout=function(){

        p[i].style.display="none";

        li[i].style.borderTop="black 1px solid";

        li[i].style.borderBottom="1px blank solid";

        }

    }

主要就这一块,就换了这一块,其他应该没啥问题。为什么就运行不了呢,求大牛指导,下面是完整的代码

<!DOCTYPE html>

<html>

<head>

    <meta charset="UTF-8">

    <title>实践题 - 选项卡</title>

    <style type="text/css">

     /* CSS样式制作 */  

    ul{

        list-style-type:none;

        position:relative;

        z-index:100;

    }

    li{

        border:1px solid ;

        width:60px;

        padding:5px;

        margin:0px 3px;

        text-align:center;

        float:right;

    }

    p{

        width:187.5px;

        float:right;

        border:1px solid blue;

        padding:20px;

        margin-top:0px;

        display:none;

        border-top:2px solid red;

        position:absolute;

        right:83px;

        top:46px;

    }

    div{

        width:280px;

    }

       

    </style>

    <script type="text/javascript">

    var p =document.getElementsByTagName("p");

    var li=document.getElementsByTagName("li");

    

    for(var i=0;i<3;i++){

        li[i].onmouseover=function(){

        p[i].style.display="block";

        li[i].style.borderTop="2px red solid";

        li[i].style.borderBottom="2px white solid";

        }

        li[i].onmouseout=function(){

        p[i].style.display="none";

        li[i].style.borderTop="black 1px solid";

        li[i].style.borderBottom="1px blank solid";

        }

    }

    

    

    // JS实现选项卡切换

    

    

    </script>

 

</head>

<body>

<!-- HTML页面布局 -->

<div>

<ul>

    <li>房产</li>

    <li>家居</li>

    <li>二手房</li>

</ul>

<p>275万购昌平邻铁三居 总价20万买一居

    200万内购五环三居 140万安家东三环

    北京首现零首付楼盘 53万购东5环50平

    京楼盘直降5000 中信府 公园楼王现房</p>

<p>40平出租屋大改造 美少女的混搭小窝

     经典清新简欧爱家 90平老房焕发新生

     新中式的酷色温情 66平撞色活泼家居

     瓷砖就像选好老婆 卫生间烟道的设计</p>

<p>

    通州豪华3居260万 二环稀缺2居250w甩

     西3环通透2居290万 130万2居限量抢购

     黄城根小学学区仅260万 121平70万抛!

     独家别墅280万 苏州桥2居优惠价248万</p>

</div>

 

</body>     

</html>  


写回答 关注

2回答

  • stone310
    2016-11-13 23:31:31
    已采纳

    代码:

    for(var i=0;i<3;i++){
        li[i].index=i;
        li[i].onmouseover=function(){
            p[this.index].style.display="block";
            li[this.index].style.borderTop="2px red solid";
            li[this.index].style.borderBottom="2px white solid";
        }
        li[i].onmouseout=function(){
            p[this.index].style.display="none";
            li[this.index].style.borderTop="black 1px solid";
            li[this.index].style.borderBottom="1px blank solid";
        }
    }


    土豪码农

    非常感谢!一开始我看不懂,学了这些天,也常常遇到这个问题,感觉i总是传递不过去,现在终于明白了。真的非常感觉,采纳晚了

    2016-11-29 11:46:27

    共 1 条回复 >

  • stone310
    2016-11-13 23:23:25

    因为页面加载完的时候已经for循环完毕,而事件还没触发,因此i值在触发事件的时候已经是定值,这里是3,所以无论li[3]还是p[3]都是不存在的,这里要用每一个li(li[i])的index属性来保存对应的每一个i,事件函数内再去调用

JavaScript进阶篇

本课程从如何插入JS代码开始,带您进入网页动态交互世界

468060 学习 · 21891 问题

查看课程

相似问题