javascript - window.onload被覆盖,怎么解决?
问题描述
window.onload = function(){ var para =document.createElement('p'); var info = 'NodeName:'; info += para.nodeName; info += ' NodeType:'; info += para.nodeType; alert(info); } window.onload = function(){ var para = document.getElementById('testid'); var e = document.createElement('p'); var txt = document.createTextNode('hello zmz'); para.appendChild(e); e.appendChild(txt); }
只执行了第二个window.onload,但是我想让两个window.onload都执行。该怎么处理?
问题解答
回答1:我们都知道onload事件只能执行一次,所以假设你要运行两个onload时候执行的函数,最后只能执行后一个onload事件的函数,那么我们如何执行多个onload事件的函数呢,形式如下:
window.onload = function(){num1();num2();}
所以,我们就顶一个函数addLoadEvent(func),它只接受参数,就是在页面加载完毕时执行的函数的名字
function addLoadEvent(func){ var oldonload = window.onload; //把现在有window.onload事件处理函数的值存入变量oldonload。 if(typeof window.onload != ’function’){ //如果这个处理函数还没有绑定任何函数,就像平时那样把新函数添加给它 window.onload = func; }else{ //如果在这个处理函数上已经绑定了一些函数。就把新函数追加到现有指令的末尾 window.onload = function(){ oldonload(); func(); } } }
调用:
addLoadEvent(num1);addLoadEvent(num2);回答2:
window.addEventListener(’load’,function(e){state1},false);window.addEventListener(’load’,function(e){state2},false);不建议用onload
回答3:建议 一个页面就一个window.onload
window.onload = function(){ var para =document.createElement('p'); var info = 'NodeName:'; info += para.nodeName; info += ' NodeType:'; info += para.nodeType; alert(info); var para = document.getElementById('testid'); var e = document.createElement('p'); var txt = document.createTextNode('hello zmz'); para.appendChild(e); e.appendChild(txt); }
如果怕命名冲突,可用封闭空间
window.onload = function(){ (function(){var para =document.createElement('p'); var info = 'NodeName:'; info += para.nodeName; info += ' NodeType:'; info += para.nodeType; alert(info); })();(function(){var para = document.getElementById('testid'); var e = document.createElement('p'); var txt = document.createTextNode('hello zmz'); para.appendChild(e); e.appendChild(txt); })();} 回答4:
方法1
function fn1(){ var para =document.createElement('p'); var info = 'NodeName:'; info += para.nodeName; info += ' NodeType:'; info += para.nodeType; alert(info); }function fn2(){ var para = document.getElementById('testid'); var e = document.createElement('p'); var txt = document.createTextNode('hello zmz'); para.appendChild(e); e.appendChild(txt); }window.onload = function(){ fn1(); fn2();}
方法2是用楼上的方法。
window.addEventListener(’load’,function(e){fn1();},false);window.addEventListener(’load’,function(e){fn2();},false);
相关文章:
1. 新人求问:打开browsersync出现这个问题怎么解决?2. 百度地图api - Android百度地图SDK,MapView上层按钮可见却不可触,怎么解决?3. javascript - vuex报错 this.$store.dispatch is not a function,怎么解决?4. javascript - nodemailer连接超时,怎么解决?5. javamail - android使用163的smtp服务发送邮件时老会出现554 DT:SPM这个问题,不知怎么解决?6. navicat for mysql就在这个网站上下载的破解版出现错误怎么解决?7. javascript - 请问一下fullpage只能初始化一次的问题怎么解决?8. angular.js - Beego 与 AngularJS的模板格式冲突,该怎么解决?9. python 使用requests 访问 繁体字网站会出现乱码,不知怎么解决?10. javascript - ios返回不执行js怎么解决?

网公网安备