onload事件屬性,JQ中的load,ready方法


onload事件屬性,JQ中的load,ready方法

前言

  頁面中的很多操作,需要我們在所需資源下載完成后,才可以進行操作,而資源沒有及時下載,我們進行操作的話,是會報錯。因此我們需要熟練掌握哪些事件可以幫助我們在資源准備就緒后,再開始進行相關的操作。接下來我們就原生JS的事件屬性onload,JQ中的load,ready方法進行一些討論。

onload

  HTML onload事件屬性,常用在<body>中,一旦完全加載所有內容(包括圖像,腳本文件,CSS文件等),就執行一段腳本。

  以下內容是參考了《鋒利的Jquery》一書,感興趣的朋友也可以去原書了解.

  window.onload的執行時機:必須等待網友中所有的內容加載完畢后(包括圖片)才能執行。

  編寫個數: 不能同時編寫多個

1 window.onload = function() {
2      alert(" test1 "); 
3 };
4 window.onload = function() {
5      alert(" test2 "); 
6 };

  結果只會輸出“test2”。

  特別注意: 像onload事件之類的使用匿名函數,即window.onload = function() { fnc(); //這里執行函數};這種形式的才是在頁面加載完成后執行。

  另外使用DOM0級的方式是可以編寫多個的。例如:

<body onload="a();b()">
    // 代碼
</body>

  不推薦這么寫吧。

  onload事件屬性存在用戶體驗的問題,如果當需要下載的資源很大時,需要用戶等待很長的時間。

JQ的ready()方法

  通過這個方法,可以在DOM載入就緒能夠讀取並操縱時立即調用你所綁定的函數,可以極大地提高web應用程序的響應速度。

  $(document).ready()執行的時機:網頁中所有DOM結構繪制完畢后就執行,可能DOM元素關聯的東西並沒有加載完.

  編寫個數:能同時編寫多個,比如:

  

$(document).ready(function() {
      alert("Hello world");
});
$(document).ready(function() {
      alert("Hello world");
});

  結果兩次都輸出。同一個頁面可以無限次使用$(document).ready()事件,其中注冊的函數會按照(代碼中的)先后順序依次執行

  簡寫方式:

$(function() {
     //代碼
});

  更詳細的介紹,可以看《鋒利的Jquery》一書,第四章4.1.1

JQ中的load()方法

  但是比如我們需要對圖片進行剪切,縮放操作時,需要網頁所有的內容加載完畢后才執行的話,可以使用$(window).load()方法,這個方法會等到頁面所有內容加載完畢后才會觸發,並且同時沒有onload事件屬性的缺點。

$(window).load(function() {
     alert("test1");
});
$(window).load(function() {
     alert("test2");
});

  代碼會在頁面所有內容加載完成后按照先后順序執行。

  《鋒利的Jquery》中4.1.1中的描述如下:

  另外需要注意一點,由於在$(document).ready()方法內注冊的事件,只要DOM就緒就會被執行,因此可能此時元素的關聯文件未下載完。例如與圖片有關的HTML下載完畢,並且已經解析為DOM樹了,但很可能圖片還未加載完畢,所有例如圖片的高度和寬度這樣的屬性此時不一定有效。要解決這個問題,可以使用jQuery中另一個頁面加載的方法--load()方法。load()方法會在元素的onload事件中綁定一個處理函數。如果處理函數綁定給window對象,則會在所有內容(包括窗口,框架,對象和圖像等)加載完畢后觸發,如果處理函數綁定在元素上,則會在元素的內容加載完畢后觸發。

  補充說明下,JQ中有兩個load()方法,一個是JQuery事件load()方法,一個是JQuery Ajax load()方法.

  具體調用哪個函數,根據參數而定。

  JQuery事件load()方法:

$("img").load(function() {
     $("div").text("圖像已加載");
});

  在圖像加載完成后,輸出“圖像已加載”;

  JQuery Ajax load()方法:

  load() 方法通過 AJAX 請求從服務器加載數據,並把返回的數據放置到指定的元素中。

$("button").click(function() {
   $("div").load("demo_ajax_load.txt");
});

  通過AJAX請求來改變div元素的文本。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM