Home  >  Q&A  >  body text

javascript - 为何你会使用 load 之类的事件 (event)?此事件有缺点吗?你是否知道其他替代品,以及为何使用它们?

使用load事件的话我理解的是因为js如果要操作dom元素的话要在dom树构建完成之后才可以操作。所以通常在js代码开头加window.onload或者jQuery的$(document).ready()。
问下这个事件的缺点是什么?
还有这个事件的替代事件有什么?除了DOMContentLoaded。

阿神阿神2724 days ago405

reply all(3)I'll reply

  • 伊谢尔伦

    伊谢尔伦2017-04-11 09:05:26

    document.readyState可以用来模拟类似情况,不过没什么必要吧,window.onload很常规的用法,好像还没听说会出什么问题。

    reply
    0
  • 伊谢尔伦

    伊谢尔伦2017-04-11 09:05:26

    window.onload=fun

    其实这里这个是没问题的,但是假如有你有个插件也这样写,你也这样写:

    //你的代码
    window.onload=fun1
    
    //插件代码
    window.onload=fun2
    

    这里会出现什么问题呢?
    很明显,fun1被替换成fun2;所以就会出现,你的代码失效了!
    现在很多插件都是要等到文档加载完才执行的,所以很多插件自己内部都会这有类似window.onload的注册方法,那么大家都用window.onload来注册函数那么就会出现部分代码失效问题!

    而jquery的ready方法不会出现这个问题,因为它是个函数,函数有个参数是回调函数,每执行一次就会注册一个回调,你的代码写在回调里,这样就不会出现代码失效了,即使大家都用ready这个方法。

    需要一个原理的可以研究下jquery的ready函数源码

    reply
    0
  • 巴扎黑

    巴扎黑2017-04-11 09:05:26

    楼上有说到 window.onload 互相覆盖的问题,addEventListener 即可。
    这个事件本身没什么问题,应用场景的话我主要是做一些数据的加载和空闲时间资源的请求,例如从 localstorage 里加载一些东西。(不过细节时间点的控制,由于我做的是 SPA,所以是在内部页面生命周期里控制的)
    于此对应的可能还会用到一些事件,如 unloadpagehide 之类的。

    reply
    0
  • Cancelreply