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. javascript - 前端開發 本地靜態文件頻繁修改,預覽時的緩存怎么解決?2. javascript - nodemailer連接超時,怎么解決?3. node.js - 報錯:Object.assign不是一個函數怎么解決?4. node.js - 【mongodb · mongoose】錯誤 "Topology was destroyed" 怎么解決?5. javascript - vue: 父組件給子組件傳遞數據,子組件接收到了,但是報錯,怎么解決?6. 路由 - nginx訪問不了根目錄下的文件怎么解決?7. 請問老師,我導入模板后按視頻講解操作,css跟js還是下載不出來,這個問題能怎么解決?8. Mac下phpinfo和php -m里的擴展不一致怎么解決?9. angular.js - Beego 與 AngularJS的模板格式沖突,該怎么解決?10. javascript - 請問一下fullpage只能初始化一次的問題怎么解決?
