问答详情
源自:3-3 编程练习

为什么要把对addEvent函数的调用写在window.onload=function(){}里面

为什么要把addEvent(login_btn,'click',showLogin);和addEvent(close,'click',hideLogin);写在window.onload=function(){}里面,写在外面不行吗?如果可以,要怎样写呢?

提问者:我要吃冰激凌 2016-03-16 15:53

个回答

  • Lshah
    2016-04-05 19:03:16

    我也是想问这个问题,开始我想的是可能没有读取到body下面的id,所以不行,因为window.onload是页面加载完了才开始执行js代码,但是后来我把js代码写在body最下面,把addEvent写在外面还是不行...哎我也在到处求问

  • Jiaoguanwen
    2016-03-16 20:22:14

    通常情况下,js写在文档末尾,即</body>后面,因为js的加载会使静态页面加载中断,比如js加载中部,会只出现js之前的静态页面,影响页面展示,带来不好的用户浏览体验,同理,写在前面或者头部,会加载js而不加载html,使得用户看到了长达数秒的空白的页面(一般网路状况下和一般电脑配置下),所以一般写在末尾,但如果要写在头部也是也是可以的,需要加一句window.onload,这句话的意思是在页面加载完成后加载js,效果等同于将js放在末尾。明白了吗?

  • 随性随意
    2016-03-16 20:20:01

    不建议这么写,可能会出问题。

    浏览器在解析html代码时是从上向下依次解析的。如果js代码在body标签之前没有使用onload的情况下,则document.getElementById("xxx");这句代码可能会因为id="xxx"的元素节点还没有解析出来就被获取但实际上是获取不到的

    而onload的意思就是说先让其它html代码解析出来,最后解析onload中的代码。

  • 随性随意
    2016-03-16 20:14:09

    不建议这么写,可能会出问题。

    因为浏览器在解析html代码的时候是从上倒下依次解析的。如果js代码在没有onload并且在body标签之前的情况下解析时;那么会出现一个问题:document.getElementById("XXX");这句代码中的id=“XXX”的元素节点还没有被解析出来,你就直接获取了。这种情况可能会出现bug