日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 前端技术 > javascript >内容正文

javascript

JavaScript之共享onload

發布時間:2025/5/22 javascript 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 JavaScript之共享onload 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

我們知道,當我們將JS代碼腳本放到<head></head>標簽之間時,這是的js代碼加載要先于DOM加載,而我們往往會在JS代碼腳本中寫一些獲取DOM元素的代碼,而此時的DOM是不完整的,

所以我們通常的解決方法是將函數放入到window.onload里面去,window.load事件是網頁加載完畢時會觸發的一個事件,如果將我們的函數與之綁定,我們的函數也會在頁面加載完畢之后執行.

如下代碼:

<html xmlns="http://www.w3.org/1999/xhtml"> <head><title></title><script type="text/javascript">var aa = document.getElementById("target");alert(aa.nodeName);</script> </head> <body><div id="target"></div> </body> </html>

這段代碼在瀏覽器執行時就會報錯,aa is null;因為在js獲取id=target的div時,該div還沒有加載完畢。所以我們需要這樣來解決這個問題,代碼如下:

<html xmlns="http://www.w3.org/1999/xhtml"> <head><title></title><script type="text/javascript">window.onload = bb;function bb() {var aa = document.getElementById("target");alert(aa.nodeName);}</script> </head> <body><div id="target"></div> </body> </html>

這個時候代碼正常輸出:DIV;? nodeName默認輸出標簽名的大寫形式;

這似乎已經解決了我們的問題,但是不夠perfect,如下代碼:

<html xmlns="http://www.w3.org/1999/xhtml"> <head><title></title><script type="text/javascript">window.onload = bb;cc();function bb() {var aa = document.getElementById("target");alert(aa.nodeName);}function cc() {var dd = document.getElementById("Div1");alert(dd);}</script> </head> <body><div id="target"></div><div id="Div1"></div> </body> </html>

這個時候任然會報錯:dd id null;錯誤原因和上面一樣;

解決辦法有兩個:

1、將需要綁定window.onload事件的兩個函數寫到一個匿名函數里面,在將該匿名函數與window.onload事件綁定,ok,問題解決!

但是這個方法只能解決需要綁定window.onload事件的函數較少的情況,一旦那些函數有很多,這個方法就不是很好!

<html xmlns="http://www.w3.org/1999/xhtml"> <head><title></title><script type="text/javascript">window.onload = ee;function bb() {var aa = document.getElementById("target");alert(aa.nodeName);}function cc() {var dd = document.getElementById("Div1");alert(dd.firstChild.nodeValue);}function ee() {bb();cc();}</script> </head> <body><div id="target"></div><div id="Div1">asdas</div> </body> </html>

?

2、這是一個彈性最佳的解決方案?????? 不管你打算在頁面加載完畢是執行多少個函數,他都能應付自如;代碼如下:

<html xmlns="http://www.w3.org/1999/xhtml"> <head><title></title><script type="text/javascript">addOnLoadEvent(aa);addOnLoadEvent(bb);function aa() {var aa=document.getElementById("ab");alert(aa.firstChild.nodeValue);}function bb() {var bb = document.getElementById("abc");alert(bb.firstChild.nodeValue);}//定義一個addOnLoadEvent的函數 function addOnLoadEvent(func) {var oldonload = window.onload;if (typeof window.onload != "function") {window.onload = func; //如果window.onload事件沒有綁定任何function則正常綁定 }else {//如果window.onload事件已經綁定了函數,則在原來的基礎上,繼續添加新的函數window.onload = function () {oldonload();func();};}}</script> </head> <body> <div id="ab">1</div> <div id="abc">2</div> </body> </html>

上面的addOnloadEvent()方法解決了我們的問題,但是還不夠全面,因為當需要綁定的方法過多時,我們就要寫多條addOnLoadEvent(方法);所以為了減少代碼量這里的代碼還可以這樣改,

代碼如下:

<html xmlns="http://www.w3.org/1999/xhtml"> <head><title></title><script type="text/javascript">var onloadlist = [aa,bb];//定義一個數組,數組里面都是需要在頁面加載完畢之后才執行的函數引用 addOnLoadEvent(onloadlist);function aa() {alert(1);}function bb() {alert(2);}function addOnLoadEvent(eventlist) {//循環遍歷數組依次加到隊列中window.onload = function () {for (var i = 0; i < eventlist.length; i++) {eventlist[i]();}}}</script> </head> <body> <div id="ab">1</div> <div id="abc">2</div> </body> </html>

這樣就一定程度上減少了代碼量,還便于管理方法的執行先后順序。

?

轉載于:https://www.cnblogs.com/GreenLeaves/p/5726271.html

總結

以上是生活随笔為你收集整理的JavaScript之共享onload的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。