如果我写这个
$(document).ready( function () {
alert("bla1");
});
$(document).ready( function () {
alert("bla2");
});
一切都很好,两个警报发生,但如果代码是
window.onload = function () {
alert("bla1");
}
window.onload = function () {
alert("bla2");
}
第二次警告没有发生,请告诉某人,为什么2个或更多 window.onload 是错误的?
答案 0 :(得分:8)
你为它指定了一些东西。然后,您可以为其指定其他内容并覆盖之前的内容。
foo = 1;
foo = 2;
// foo is now "2" it is not "1" and "2"
如果要非破坏性地分配事件处理程序,请使用addEventListener
。您需要使用兼容性方法来支持Old-IE。这些方法通过on
method构建到jQuery中。
答案 1 :(得分:3)
喜欢
var test;
test = 10;
test = 20
alert(test); // 20
你覆盖它和jQuery处理load事件的方式不同。
答案 2 :(得分:3)
如果要实现所需的行为,则必须使用addEventListener函数。
window.addEventListener("load",function () {
alert("bla1");
}, false);
window.addEventListener("load",function () {
alert("bla2");
}, false);
答案 3 :(得分:1)
Robert Hahn对他的blog有一个很好的解决方案。
function makeDoubleDelegate(function1, function2) {
return function() {
if (function1)
function1();
if (function2)
function2();
}
}
window.onload = makeDoubleDelegate(window.onload, myNewFunction );
makeDoubleDelegate()函数将放在第一个JS文件中, 随时准备好进行任务。它的作用是接受两个函数 参数,检查它们是否存在,如果存在,则返回匿名 函数包含有效的现有函数。
第一次调用window.onload时,window.onload本身就是 undefined,所以返回的是一个只有匿名函数 myNewFunction()里面。在随后的window.onload分配中, window.onload确实存在,所以无论它持有什么都将被包裹起来 新功能。这个名单也在增长。
答案 4 :(得分:0)
尝试这样的事情
function doOnLoad() {
alert("hi");
alert("bye");
}
window.onload = doOnLoad;
答案 5 :(得分:0)
我知道我的答案为时已晚,但您可以尝试这样的事情:
function hello() {
window.alert("hello");
}
function bye() {
window.alert("bye");
}
window.onload=hello,bye;