成人无码视频,亚洲精品久久久久av无码,午夜精品久久久久久毛片,亚洲 中文字幕 日韩 无码

資訊專欄INFORMATION COLUMN

細(xì)說 jQuery 事件篇(一) - 代碼執(zhí)行時機(jī)

dunizb / 2866人閱讀

摘要:在元素一篇介紹過,可以使用來使得代碼在加載完畢后自動執(zhí)行代碼,接下來具體介紹下這個機(jī)制。這樣看上去貌似沒什么問題,但是如果有兩個函數(shù)需要指定時就會遇到麻煩,因為屬性只能保存對一個函數(shù)的引用,如果我們寫成以下形式最后代碼執(zhí)行后的效果是會覆蓋。

在元素一篇介紹過,jQuery 可以使用 $(document).ready() 來使得代碼在 DOM 加載完畢后自動執(zhí)行代碼,接下來具體介紹下這個機(jī)制。

  

$document.ready() 可以簡寫為 $(),為了書寫更直觀,本文暫不采用簡寫方式。

比較 window.onload

我們可以使用原生 Javascript 中的 window.load 方法實現(xiàn) $document.ready() 的效果,但兩者還是有不小的差異。
對于 window.load 是指整個文檔對象已經(jīng)完完全全地加載到頁面中來,而 jQuery$document.ready() 方法則是指 DOM 完全就緒,兩者的差異可以用一個例子來說明:

  

假設(shè)當(dāng)前頁面具有大量的圖像文件,對于 window.load 方法,必須等到所有關(guān)聯(lián)的圖像文件都已經(jīng)下載完畢后才生效,而 $document.ready() 則在 HTML 下載完畢并已經(jīng)解析為 DOM 樹時便已經(jīng)生效。

這樣看上去貌似 jQuery 的方法要優(yōu)于原生 Javascript 的處理方法,實際上也的確如此,但對于有些情況下,則必須使用 load 方法才會生效,例如上例中的圖像,當(dāng)我們在代碼中需要對圖像的長寬屬性進(jìn)行處理時,則需要使用 load 方法來實現(xiàn),這兩種方法應(yīng)該根據(jù)實際需求配合使用。

單頁面執(zhí)行多個腳本

在傳統(tǒng)的 Javascript 代碼中,我們經(jīng)??吹綄⒁粋€函數(shù)指定給 DOM 元素的對應(yīng)屬性,例如如下代碼:

function myClick() {
  //do some stuff here.
}


也可以寫成這種形式:

document.querySelector("button").onclick = myClick;
  

這里寫成 myClick 而不是 myClick(),因為前者指的是對函數(shù)引用,后者指的是函數(shù)執(zhí)行,前者因為是引用,所以可以再將來被再次調(diào)用,而后者則是指頁面加載時立即調(diào)用執(zhí)行,不能再被調(diào)用。

這樣看上去貌似沒什么問題,但是如果有兩個函數(shù)需要指定時就會遇到麻煩,因為 onclick 屬性只能保存對一個函數(shù)的引用,如果我們寫成以下形式:

document.querySelector("button").onclick = myClick1;
document.querySelector("button").onclick = myClick2;

最后代碼執(zhí)行后的效果是 myClick2 會覆蓋 myClick1
而如果我們使用 jQuery 的機(jī)制,則能很好地解決這個問題,每次調(diào)用 $doucment.ready() 時都會向內(nèi)部的行為隊列添加一個新的函數(shù),當(dāng)頁面加載完畢后,所有的函數(shù)都會按順序執(zhí)行。

$(document).ready(function() {
  $("button").click(function() {
    //do myClick1 stuff here.
  });
  $("button").click(function() {
    //do myClick2 stuff here.
  });
});

然而實際上現(xiàn)版本的 Javascript 已經(jīng)引入 addEventListener 方法來解決這個問題:

document.querySelector("button").addEventListener("click", myClick1, false);
document.querySelector("button").addEventListener("click", myClick2, false);

但是考慮到兼容性,jQuery 可以讓我們更加輕松地應(yīng)對這個問題。

解決命名沖突

很多時候,我們需要使用的庫不僅僅只有 jQuery,而由于很多庫都會采用 $ 來作為標(biāo)識符,因此就需要一種解決命名沖突的機(jī)制。
為了解決這個常見的問題,jQuery 提供了一個 noConflict() 方法,使用該方法后,可以將 $ 的控制權(quán)過度給其他的庫來使用。假設(shè)我們有個 myLibrary 的庫,該庫也使用 $ 來作為標(biāo)識符,那么使用方法為:



此時再寫 jQuery 方法時就必須采用以下的形式:

jQuery(document).ready(function($) {
  //do stuff here.
});

或者使用簡寫方式:

jQuery(function($) {
  //do stuff here.
});

這個其實很好理解,即我們將 jQuery 對象本身作為參數(shù)傳遞給回調(diào)函數(shù),并且在內(nèi)部命名為 $,這樣在回調(diào)函數(shù)內(nèi)部可以自由書寫正常的 jQuery 代碼。

參考

http://book.douban.com/subject/24669823/

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://m.hztianpu.com/yun/78144.html

相關(guān)文章

  • 細(xì)說 jQuery 事件(三) - 事件傳播

    摘要:是如何決定由哪個元素來處理事件的,以及又是如何優(yōu)化處理這個問題的,這些都涉及到了事件傳播。事件冒泡的弊端事件冒泡可能會導(dǎo)致意料之外的行為,例如在響應(yīng)事件時,依舊是上例,當(dāng)為最外層的添加一個事件。使用方法可以避免事件傳播導(dǎo)致的問題。 Javascript 是如何決定由哪個元素來處理事件的,以及 jQuery 又是如何優(yōu)化處理這個問題的,這些都涉及到了事件傳播。 事件傳播策略 當(dāng)頁面內(nèi)...

    Cc_2011 評論0 收藏0
  • 細(xì)說 jQuery Ajax操作) - 數(shù)據(jù)加載

    摘要:同樣將其綁定在按鈕點擊事件上查看結(jié)果為這里需要注意,如果文檔內(nèi)的格式錯誤,雖然不會報錯,但是將無法執(zhí)行回調(diào)函數(shù)。 Ajax 通俗來講即不需要刷新頁面即可從服務(wù)器或客戶端上加載數(shù)據(jù),當(dāng)然這些數(shù)據(jù)的格式是多種多樣的。 加載 HTML 我們通常使用加載 HTML 的方法來加載 HTML 片段,并插入到指定位置,假設(shè)當(dāng)前頁面為: load showImg(http://segmen...

    paulli3 評論0 收藏0
  • 細(xì)說 jQuery 事件(四) - 改變事件過程

    摘要:事件對象是一種結(jié)構(gòu),它會在元素獲得處理事件的機(jī)會時傳遞給調(diào)用的事件處理程序。事件對象的屬性指的是事件目標(biāo),它將保存發(fā)生事件的目標(biāo)元素。所以,接下來我們就要想辦法改變事件過程來阻止這個行為。 在 《細(xì)說 jQuery 事件篇(三) - 事件傳播》 中提到了事件冒泡可能造成的弊端,當(dāng)時舉了 mouseout 的例子,對于 mouseout 這個特殊情況,我們可以用 hover 方法來解決,...

    nifhlheimr 評論0 收藏0
  • 細(xì)說 jQuery 事件(二) - 處理簡單事件

    摘要:我們可以利用可以對用戶發(fā)起的事件進(jìn)行處理,這里以樣式轉(zhuǎn)換為例來說明。其他類似的操作事件都可以通過這個方法,將處理事件的程序綁定到同名事件上面。 我們可以利用 jQuery 可以對用戶發(fā)起的事件進(jìn)行處理,這里以樣式轉(zhuǎn)換為例來說明。 增添樣式 基于用戶的事件,對特定的 DOM 元素樣式進(jìn)行轉(zhuǎn)換是 jQuery 處理事件中比較常見的情形,舉例說明,當(dāng)用戶點擊輸入框后,會增添 highli...

    ckllj 評論0 收藏0
  • 細(xì)說 jQuery 事件(五) - 事件的移除和重綁定

    摘要:一種做法是在事件處理程序中使用條件語句進(jìn)行判斷,另一種更徹底的做法就是直接移除該處理程序。事件重綁定我們添加一個按鈕,當(dāng)點擊按鈕后,所有的事件的處理程序又被重新綁定回來。 如果我們需要移除已經(jīng)注冊的事件處理程序,使某些處理程序失效。一種做法是在事件處理程序中使用條件語句進(jìn)行判斷,另一種更徹底的做法就是直接移除該處理程序。 移除處理程序 假設(shè)有個 div 和 button,當(dāng)我們點擊...

    boredream 評論0 收藏0

發(fā)表評論

0條評論

閱讀需要支付1元查看
<