为了账号安全,请及时绑定邮箱和手机立即绑定

关于window.onload的问题

关于window.onload的问题

qq_烟火里的尘埃_0 2016-08-18 10:17:37
一般把script放在body的最下方就可以获取到body里的元素了,可是我做的这个选项卡效果把script放在body的最下面了,可是去掉window.onload之后,效果就出不来了,这是怎么回事<!DOCTYPE html> <html> <head>     <meta charset="UTF-8">     <title>Title</title>     <style>         *{             margin:0;             padding:0;             list-style-type: none;         }         #container{             width:400px;             height:250px;             position: relative;         }         #top li{             width:100px;             height:50px;             float: left;         }         #bottom li{             width:400px;             height:200px;             position: absolute;             left:0;             top:50px;             display: none;         }         .first{             background: red;         }         .second{             background: blue;         }         .third{             background: purple;         }         .four{             background: pink;         }         #bottom li.first{             display: block;         }     </style> </head> <body> <div id="container">     <ul id="top">         <li></li>         <li></li>         <li></li>         <li></li>     </ul>     <ul id="bottom">         <li></li>         <li></li>         <li></li>         <li></li>     </ul> </div> <script>     window.onload= function () {         var top = document.getElementById("top"),             top_li = top.getElementsByTagName("li"),             bottom = document.getElementById("bottom"),             bottom_li = bottom.getElementsByTagName("li");         for (var i = 0; i<top_li.length;i++){             top_li[i].index = i;             top_li[i].onclick = function(){                 for (var j = 0;j<bottom_li.length;j++){                     bottom_li[j].style.display = "none";                 }                 bottom_li[this.index].style.display = "block";             };         }     } </script> </body> </html>
查看完整描述

3 回答

已采纳
?
stone310

TA贡献361条经验 获得超191个赞

思路没错的!问题出在top这个变量名字上,你会发现这一段程序在IE下能完美执行,

因为window.onload去掉后,变量为全局变量,而chrome和FF已经把top这个变量定义了,所以不能再用top作为全局变量,你随便换个名字都可以了

查看完整回答
反对 回复 2016-08-18
?
田心枫

TA贡献1064条经验 获得超383个赞

去掉js都没加载进来,当然不起作用

查看完整回答
反对 回复 2016-08-18
  • qq_烟火里的尘埃_0
    qq_烟火里的尘埃_0
    我放在最下面了,应该加载进来了啊
  • 田心枫
    田心枫
    window.onload=function(){}是指当页面全部加载完毕之后,再去执行function(){}大括号中的代码。 这样写是因为要保证代码执行的时候,HTML的所有DOM节点已经加载出来了。由于性能或者网络问题,页面的加载不是一瞬间完成的,是有一个时间过程的,比如你想用JS操作一张图片的话,当网页读取到这一段JS代码的时候,图片的DOM节点可能还没有加载出来,浏览器就会报错。为了避免这种情况,所以要在window.onload事件触发之后,再去执行后面的function。 上面只是一个比较简单的解释,更详细的你可以查阅一下相关的资料,涉及到了浏览器的渲染机制、DOM的加载顺序等等。
  • 田心枫
    田心枫
    不加这个的话,你function的代码没法执行
  • 3 回答
  • 0 关注
  • 1562 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信