JS和HTML之間的交互是通過用戶和瀏覽器操作頁面時(shí)引發(fā)的事件來處理的。當(dāng)文檔或者它的某些元素發(fā)生某些變化時(shí),瀏覽器會(huì)自動(dòng)生成一個(gè)事件。例如當(dāng)瀏覽器裝載完一個(gè)文檔后一點(diǎn)資訊 圖片加載失敗,會(huì)生成事件;當(dāng)用戶單擊某個(gè)按鈕時(shí),也會(huì)生出事件。雖然利用傳統(tǒng)的JS事件能完成這些交互,但Q增加并擴(kuò)展了基本的事件處理機(jī)制Q不僅提供了更加雅的事件處理語法而且極大地增強(qiáng)了事件處理能力。的相關(guān)資訊可以到我們網(wǎng)站了解一下,從專業(yè)角度出發(fā)為您解答相關(guān)問題,給您優(yōu)質(zhì)的服務(wù)!
DOM加載
以瀏覽器裝載文檔為例,在頁面加載完畢后,瀏覽器會(huì)通過S為DOM元素添加事件。在常規(guī)的JS代碼中,通常使用 方法,而在Q中,使用的事$()。()方法。$()。()方法是事件模塊中比較重要的一個(gè)函數(shù),可以極大地提高WEB應(yīng)用程序的響應(yīng)速度。Q就是用$()。()方法來代替?zhèn)鹘y(tǒng)JS的$()。()方法的。通過使用該方法,可以在DOM載入就緒時(shí)就對(duì)其進(jìn)行操縱并調(diào)用執(zhí)行它所綁定的函數(shù)。在使用過程中一點(diǎn)資訊 圖片加載失敗,需要注意$()。()方法和 方法之間的細(xì)微區(qū)別。
執(zhí)行時(shí)機(jī)
$()。()方法和 方法有相似的功能,但是在執(zhí)行時(shí)機(jī)方面是有區(qū)別的。 方法是在頁中所有的元素(包括元素的所有關(guān)聯(lián)文件)完全加載到瀏覽器后才執(zhí)行,即JS此時(shí)才可以訪問頁中的任何元素。而通過Q中的$()。()方法注冊(cè)的時(shí)間處理程序, 在DOM完全就緒時(shí)就可以被調(diào)用。此時(shí),頁的所有元素對(duì)Q而言都是可以訪問的,但是,這并不意味著這些元素關(guān)聯(lián)的文件都已經(jīng)下載完畢。
舉一個(gè)例子,偶一個(gè)大型的圖庫,為頁中所有圖片添加某些行為,例如單擊圖片后讓它隱藏或顯示。如果使用 方法來處理,那么用戶必須等到每一幅圖片都加載完畢后,才可以進(jìn)行操作。如果使用Q中的$()。()方法來進(jìn)行設(shè)置,只要DOM就緒就可以操作了,不需要等待所有圖片下載完畢很顯然,把頁解析為DOM樹的速度比把頁面中的所有關(guān)聯(lián)文件加載完畢的速度很多。
另外,需要注意一點(diǎn),由于在$()。()方法內(nèi)注冊(cè)的事件,只要DOM就緒就會(huì)被執(zhí)行,因此可能此時(shí)元素的關(guān)聯(lián)文件未下載完。例如與圖片有關(guān)的HTML下載完畢,并且已經(jīng)解析為DOM樹了,但很有可能圖片還未加載完畢,所以例如圖片的高度和寬度這樣的屬性此時(shí)不一定有效。要解決這個(gè)問題,可以使用Q中另一個(gè)關(guān)于頁面加載的方法----()方法。()方法會(huì)在元素的事件中綁定一個(gè)處理函數(shù)。如果處理函數(shù)綁定給對(duì)象,則會(huì)在所有內(nèi)容(包括窗口、框架、對(duì)象和圖像等)加載完畢后出發(fā),如果處理函數(shù)綁定在元素上,則會(huì)在元素的內(nèi)容加載完畢后出發(fā)。Q代碼如下:
$()。{(){
編寫代碼
}}
等價(jià)于JS中的一下代碼:
W=(){
編寫代碼
}
多次使用
我們?cè)?jīng)總結(jié)過方法和$()。()的區(qū)別,現(xiàn)在進(jìn)行詳細(xì)講解。
假設(shè)頁總有兩個(gè)函數(shù),JS代碼如下:
F () {
A();
}
F (){
A();
}
當(dāng)頁加載完畢后,通過如下JS代碼來分別調(diào)用函數(shù)和函數(shù):
=;
=;
R然而當(dāng)運(yùn)行代碼后,發(fā)現(xiàn)只彈出字符串對(duì)話框。
字符串對(duì)話框不能被彈出的原因是JS的事件一次只能保存對(duì)一個(gè)函數(shù)的引用,它會(huì)自動(dòng)用后面的函數(shù)覆蓋前面的函數(shù),因此不能在現(xiàn)有的行為上添加新的行為。
為了達(dá)到兩個(gè)函數(shù)順序出發(fā)的效果,只能再創(chuàng)建一個(gè)新的JS方法來現(xiàn),JS代碼如下:
=(){
();
();
}
雖然這樣編寫代碼能解決某些問題,但還是不能滿足某些需求,例如有多個(gè)JS文件,每個(gè)文件都需要用到 方法,這種情況下用上面提到的編寫代碼會(huì)非常麻煩。而Q的$()。()方法能夠很好地處理這些情況,每次調(diào)用$()。()方法都會(huì)在現(xiàn)有的行為上追加新的行為,這些行為函數(shù)會(huì)根據(jù)注冊(cè)的順序依次執(zhí)行。