不要奇怪。
为什么会出现两个window.onload。
很久很久以前。
我一直不明白为什么 有的 JavaScript 必须写在页面的底部才会正常执行。
而放到页面的head区则没有任何反应。
后来我明白了 因为页面加载速度的原因。
有的JavaScript脚本必须等待页面加载结束 才能正常执行。
对于这样的情况有两个解决方法:
1、将脚本写到html的结束位置。这样只有html全部接在完毕后才会加载执行JavaScript脚本。
2、将脚本放在任意位置。通过 window.onload来执行脚本。
window.onload的意思是当页面加载完毕的时候执行。
很久很久以后,我遇到了一个新的问题。
我有两个window.onload=function(){};
我自己写一个函数(T_T不是类,我蹩脚的JavaScript还不会封装类哦!)。这个函数必须在页面加载完毕之后才能正常执行。
开始我就写了一个window.onload来执行这个函数。
然后我发现了这行不通。
我写这个函数就是为了封装好给别人用的。
最终目的是 只要在页面里引用这个JavaScript脚本就可以实现相关功能。
但是现在这个脚本占用了window.onload……。
而通常一个页面是只能执行一个window.onload的。
假设某个用户使用了我这个脚本。
而他因为其他原因需要用到window.onload那不是冲突了……。
两个只能活一个啊……。
那假如我有两个window.onload应该怎么办呢?
这时就要用window.attachEvent和window.addEventListener来解决一下。
当某一事件被触发时需要执行某个函数,在IE下可用attachEvent,在FF下则要用addEventListener。
attachEvent()有两个参数,第一个是事件名称,第二个是需执行的函数;
addEventListener()有三个参数,第一个是事件名称,但与IE事件不同的是,事件不带"on",比如"onsubmit"在这里应为"submit",第二个是需执行的函数,第三个参数为布尔值;
if (document.all){
window.attachEvent('onload',函数名)//IE中
}
else{
window.addEventListener('load',函数名,false);//firefox
}
使用上边的脚本来执行我的函数就可以不与其他的onload冲突啦!
这真是太爽了!
看到prototype.js中有个Event.observe的方法可以实现这种功能。不过为了这个在加载个prototype.js。有点累赘哦。
解决多个window.onload的冲突.txt
window.onload=function(){
alert("加载完成");
onload2();
onload3();
}
本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/mtzai/archive/2009/11/21/4846404.aspx
分享到:
相关推荐
window.onload = function() { // 调用封装在mySpace命名空间下的_setStyle方法 window.mySpace.setStyle("test", "color", "#f00"); }; ``` #### 五、优点分析 1. **保护内部实现**:通过将函数封装在自执行...
或者,如果你有一个已经定义好的函数,你可以这样设置: ```javascript function onPageLoad() { // 代码 } window.onload = onPageLoad; ``` 在HTML的`<body>`标签中,我们也可以通过`onload`事件来调用一个...
如果已有一个 `window.onload` 函数存在,我们需要确保新的函数也能被调用。可以通过检查 `window.onload` 是否已经定义并将其转换为函数,然后将其与新函数合并。以下是一个示例: ```javascript var o = ...
另外,需要注意的是,如果在页面中有`<body>`标签里设置了`onload`属性,那么它会覆盖掉window对象上的onload事件处理程序,因此要避免这种情况,以免出现意外的覆盖。 最后,在文章中还提到了“jsonload处理处理...
需要注意的是,jQuery的`$(document).ready()`方法可以多次使用,而且它和原生的`window.onload`并不冲突。如果两者都使用,则`window.onload`会在`$(document).ready()`之后执行。`window.onload`通常用于在页面...
这样做可以确保`define`和`provides`这两个函数不会污染全局命名空间。模块应遵循以下原则: 1. **避免全局变量**:尽量不在全局作用域中定义变量,而是将它们封装在特定对象中。 2. **清晰的文档**:如果模块确实...
例如,如果你有两个函数`func1`和`func2`需要在页面加载后执行,你可以这样使用: ```javascript addLoadEvent(func1); addLoadEvent(func2); ``` 这样,当页面加载完成后,`func1`和`func2`都会按照它们被添加的...
在原始内容中提到,如果一个页面上存在多个window.onload函数,则只有最后一个会被执行。这是因为在JavaScript中,window.onload是一个事件处理器,它只能绑定一个事件处理函数。如果给它绑定了多个函数,那么只有...
示例:通过Ajax+JSON完成两个数的四则运算。 ```javascript $.ajax({ url: "calc.php", data: {a: 5, b: 3, op: "+"}, success: function(data) { var result = eval('(' + data + ')'); console.log(result);...
总结来说,`document.ready`和`window.onload`是JavaScript中两个关键的事件处理程序,它们用于控制代码的执行时间。`document.ready`更侧重于DOM的可用性,而`window.onload`则等待整个页面的完全加载。选择哪个取...
然而需要注意的是,这种写法可能不适用于需要传递参数给函数的情况,并且如果页面中有多个`onload`事件的话,这会导致冲突。 2. 在JavaScript脚本中使用window.onload: 另一种更为推荐的方法是在脚本中通过`...
你可以创建一个自定义函数,并在 `window.onload` 事件上绑定它,或者直接调用该函数。 ```javascript function init() { alert("初始化加载"); } // 绑定到 window.onload window.onload = init; // 或者...
window.onload事件处理函数在定义时只能有一个,如果有多个window.onload事件被指定,后续的会覆盖先前的。这一限制使得开发者在需要执行多个onload事件处理函数时,不得不编写额外的代码以确保所有需要执行的代码都...
如果需要设置多个 `onload` 事件,可以用分号隔开,例如: ```html <body onload="alert(1); alert(2); alert(3)"> ``` 这将按照顺序显示三个警告框。 2. `window.onload`: JavaScript 代码中,可以使用 `...
如果必须在`<head>`中插入JS,可以使用`window.onload`事件来确保代码在页面完全加载后执行: ```html window.onload = function() { // 你的JS代码 } ``` 外部引用JS文件时,`<script>`标签通过`src`...
这样做的好处是,如果你的页面中同时引入了其他使用`$`作为别名的库,如Prototype或Zepto,这可以避免命名冲突。 总的来说,`$(document).ready()`方法优于`window.onload`,因为它提供了更快的页面响应和更好的...
window.onload = function() { showCurrentImage(); autoSlide(); }; document.getElementById('prev').addEventListener('click', function() { clearInterval(autoSlideInterval); if (currentIndex > 0) { ...
window.onload = function() { setTimeout(function() { location.reload(true); }, 5000); // 每5秒刷新一次 } ``` 这段代码会在页面加载完成后5秒内执行页面刷新。 **注意事项**: - 自动刷新可能与浏览器...
也就是说,如果页面上有大量的资源加载,那么`window.onload`方法就会被延迟执行。它的基本用法是这样的: ```javascript window.onload = function() { // 页面加载完成后的操作 }; ``` 然而,对于包含丰富资源...