1.在A页面引入a.js和b.js;其中a.js和b.js都用了window.onload没有问题;
但是我在B页面也引入a.js和c.js,偶尔a.js就跟完全没有执行一样
但是我直接将a.js中的window.onload中的东西放入B页面的c.js的onload中,又正确执行了,不晓得是怎么回事??
1.在A页面引入a.js和b.js;其中a.js和b.js都用了window.onload没有问题;
但是我在B页面也引入a.js和c.js,偶尔a.js就跟完全没有执行一样
但是我直接将a.js中的window.onload中的东西放入B页面的c.js的onload中,又正确执行了,不晓得是怎么回事??
window.onload只有一次,所以会出现多个js同时使用它而冲突的问题。
解决办法
1.用jQuery使用ready()方法替换onload
2.在window.onload中一次加载所有js文件,例:window.onload=function(){function(a);function(b);}
我试了一下,window可以绑定多次,但是最后一次才会生效,你可以对照看下我下面的2个例子来理解你出现的情况。
//方式1:
window.onload=function () {
console.log("1");
}
window.onload=function () {
console.log("2");
}
// 输出2
// -------------------------------分割线
// 方式2:
function fn1() {
console.log("1");
}
function fn2() {
console.log("2");
}
addEventLoad(fn1);
addEventLoad(fn2);
//输出1 2
function addEventLoad(fn){
var oldFn = window.onload;
if(typeof window.onload != 'function'){
window.onload = fn;
}else{
window.onload = function(){
oldFn();
fn();
}
}
}
13 回答13k 阅读
7 回答2.2k 阅读
3 回答1.3k 阅读✓ 已解决
6 回答1.3k 阅读✓ 已解决
2 回答1.4k 阅读✓ 已解决
3 回答1.3k 阅读✓ 已解决
6 回答1.1k 阅读
通过
window.onload = function() { ... }
方法设置的事件,后面的window.onload
值会覆盖掉前面的,所以,只有最后一次生效。(这个和调用a = 1; a = 2; a =3;
是一个道理)如果需要对
window
的onload
事件进行多次绑定,建议使用addEventListener
:注意,ID中使用
attachEvent
而非addEventListener
:另外注意,
addEventListener
中用的是'load'
,而attachEvent
中用的是'onload'
。