现象
在js中使用 $(window).load(function(){ ...}) 时,会报下边的错误:
Uncaught TypeError: a.indexOf is not a function
at r.fn.init.r.fn.load (jquery.min.js:4)
stackoverflow 中有人提到说是 jquery 的版本原因,并给出了方法。
解决方法
用 on( load 来侦听回调。如:
$(window).on("load", function(){
console.log('load complete');
})
这样就不会报错了。不过 $(document).ready(function(){ ...}); 可以正常运行。
$(document).ready()和$(window).load()的区别
习惯了用 jquery ,原生的 api 丢一边了。$(document).ready()和$(window).load()的区别有以下几点:
- 执行的时间不同。
$(document).ready() 在文档准备好的时候触发。 也就是浏览器解析完完整的html文档,dom树已经建立起来,其他js, css也已经加载完成了。可以通过class属性,id属性对dom结构进行操作了。文档内的图片不一定加载完成。
$(window).load() 就是整个页面已经加载完毕。也就是图片或其他使用的资源已经加载完成。
- 执行次数不同。
$(document).ready() 可以被侦听多次。也就是在js中,可以对多出代码块进行侦听,都会有回调过来。
$(window).load() 只有一次侦听有效。也就是如果js中多处侦听,只有最后一次侦听的有效果。前边的的侦听不会有结果。