摘要:事件是應(yīng)用程序的核心,是所有內(nèi)容的驅(qū)動(dòng)。將對(duì)這兩種事件模型的支持都加入標(biāo)準(zhǔn)規(guī)范之中。根據(jù)型,事件首先被目標(biāo)元素所捕捉,然后向上冒泡。取消事件冒泡當(dāng)事件冒泡時(shí),可以通過(guò)數(shù)來(lái)終止冒泡,這個(gè)函數(shù)是對(duì)象中的方法。
事件是 JavaScript 應(yīng)用程序的核心,是所有內(nèi)容的驅(qū)動(dòng)。盡管后來(lái)W3C 對(duì)此做了標(biāo)準(zhǔn)化,但 IE 仍然堅(jiān)持使用與 W3C 不兼容的事件模型,直到 IE9 才遵循標(biāo)準(zhǔn)。有很多諸如 jQuery 和 Prototye 的類庫(kù)很好地處理了兼容性問(wèn)題,對(duì)外提供了統(tǒng)一的 API 來(lái)實(shí)現(xiàn)事件。
監(jiān)聽(tīng)事件綁定事件監(jiān)聽(tīng)的函數(shù)是addEventListener(),有 3 個(gè)參數(shù):type(比如click),listener(比如callback)及seCapture。使用前兩個(gè)參數(shù)可以給一個(gè) DOM 元素綁定一個(gè)函數(shù),當(dāng)特定的事件(比如點(diǎn)擊)被觸發(fā)時(shí)執(zhí)行這個(gè)函數(shù):
var button = document.getElementById("createButton"); button.addEventListener("click", function(){ /* ... */ }, false);
可以使用removeEventListener() 來(lái)移除事件監(jiān)聽(tīng),參數(shù)和傳入addEventListener() 的一樣。如果監(jiān)聽(tīng)的函數(shù)是匿名函數(shù),沒(méi)有任何引用指向它,在不銷(xiāo)毀這個(gè)元素的前提下,這個(gè)監(jiān)聽(tīng)是無(wú)法被移除的:
var div = document.getElementById("div"); var listener = function(event) { /* ... */ }; div.addEventListener("click", listener, false); div.removeEventListener("click", listener, false);
帶入listener函數(shù)的第 1 個(gè)參數(shù)是event對(duì)象,通過(guò)event象可以得到事件的相關(guān)信息,比如時(shí)間戳、坐標(biāo)和事件宿主元素(target)。它同樣包含很多方法來(lái)停止事件冒泡和阻止事件的默認(rèn)行為。
不同的瀏覽器對(duì)事件類型的支持有些差異,但所有現(xiàn)代瀏覽器都支持這些事件:
click
dblclick
mousemove
mouseover
mouseout
focus
blur
change (表單輸入框特有)
submit (表單特有)
事件順序如果一個(gè)節(jié)點(diǎn)和它的一個(gè)父節(jié)點(diǎn)都綁定了相同事件類型的回調(diào),當(dāng)事件觸發(fā)時(shí)哪個(gè)回調(diào)會(huì)先執(zhí)行?
瀏覽器不同有不同的默認(rèn)執(zhí)行順序,分為兩種:
事件捕捉(capturing),從頂層的父節(jié)點(diǎn)開(kāi)始觸發(fā)事件,從外到內(nèi)傳播。
事件冒泡(bubbling),從最內(nèi)層的節(jié)點(diǎn)開(kāi)始觸發(fā)事件,逐級(jí)冒泡直到頂層節(jié)點(diǎn),從內(nèi)向外傳播。
W3C將對(duì)這兩種事件模型的支持都加入標(biāo)準(zhǔn)規(guī)范之中。根據(jù)W3C型,事件首先被目標(biāo)元素所捕捉,然后向上冒泡。
可以自行選擇要注冊(cè)的事件處理程序的調(diào)用類型,捕捉或冒泡,通過(guò)給addEventListener()傳入第3個(gè)參數(shù)useCapture 來(lái)設(shè)置。如果addEventListener() 的最后一個(gè)參數(shù)是true,事件處理程序以捕捉模式觸發(fā);如果是false,事件處理程序以冒泡模式觸發(fā):
// 給最后一個(gè)參數(shù)傳入false,來(lái)設(shè)置事件冒泡 button.addEventListener("click", function(){ /* ... */ }, false);
大多數(shù)情況下是使用冒泡模式,如果對(duì)此不太確定,可以給addEventListener()`的最后一個(gè)參數(shù)傳入false。
取消事件冒泡當(dāng)事件冒泡時(shí),可以通過(guò)stopPropagation()數(shù)來(lái)終止冒泡,這個(gè)函數(shù)是event對(duì)象中的方法。比如這段代碼,任何父節(jié)點(diǎn)的事件回調(diào)都不會(huì)觸發(fā):
button.addEventListener("click", function(e){ e.stopPropagation(); /* ... */ }, false);
jQuery 還支持stopImmediatePropagation()函數(shù),用來(lái)阻止后續(xù)所有的事件觸發(fā)——哪怕這些事件是注冊(cè)在同一個(gè)節(jié)點(diǎn)元素上的。
阻止瀏覽器的默認(rèn)行為瀏覽器給事件賦予了默認(rèn)行為。比如,點(diǎn)擊一個(gè)鏈接時(shí),瀏覽器的默認(rèn)行為是載入新頁(yè)面,當(dāng)點(diǎn)擊一個(gè)復(fù)選框時(shí),瀏覽器會(huì)將其選中(或取消選中)。在事件傳播階段(之后)會(huì)觸發(fā)這些默認(rèn)行為,在任何一個(gè)事件處理程序中都可以阻止默認(rèn)行為??梢酝ㄟ^(guò)調(diào)用event對(duì)象的preventDefault()函數(shù)來(lái)阻止默認(rèn)行為,也可以通過(guò)在回調(diào)中返回false來(lái)實(shí)現(xiàn)同樣的效果:
bform.addEventListener("submit", function(e){ /* ... */ return confirm("Are you super sure?"); }, false);
如果調(diào)用confirm()返回false(用戶點(diǎn)擊了對(duì)話框的取消按鈕),這個(gè)事件回調(diào)函數(shù)就返回false,這樣就會(huì)取消事件,阻止表單的提交。
(公開(kāi)記錄學(xué)習(xí)JS MVC,不知道能堅(jiān)持多久= =。以《基于MVC的JavaScript web富應(yīng)用開(kāi)發(fā)》為主要學(xué)習(xí)資料。)
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://specialneedsforspecialkids.com/yun/85526.html
摘要:事件類型布爾值,表示事件是否通過(guò)以冒泡形式觸發(fā)。表示鍵盤(pán)事件的屬性布爾值,表示當(dāng)前按下的鍵是否表示一個(gè)字符。表示當(dāng)前按鍵的值僅對(duì)事件有效。,事件發(fā)生時(shí)相對(duì)于屏幕的坐標(biāo)。 事件對(duì)象 event 對(duì)象還包含很多有用的屬性。W3C 范中包含的大部分屬性都列在下面,更多信息參照完整的標(biāo)準(zhǔn)規(guī)范。 事件類型: bubbles :布爾值,表示事件是否通過(guò)DOM 以冒泡形式觸發(fā)。 事件發(fā)生時(shí)...
摘要:以基于的富應(yīng)用開(kāi)發(fā)為主要學(xué)習(xí)資料。下面用實(shí)現(xiàn)一個(gè)例子使用匿名函數(shù)來(lái)封裝一個(gè)作用域在頁(yè)面加載時(shí)綁定事件監(jiān)聽(tīng)上面的代碼創(chuàng)建了控制器,這個(gè)控制器是放在變量下的命名空間。然后用了一個(gè)匿名函數(shù)封裝了一個(gè)作用域,以避免對(duì)全局作用域造成污染。 公開(kāi)記錄學(xué)習(xí)JS MVC,不知道能堅(jiān)持多久= =。以《基于MVC的JavaScript web富應(yīng)用開(kāi)發(fā)》為主要學(xué)習(xí)資料。 什么是MVC MVC 是一種設(shè)...
摘要:它通過(guò)數(shù)據(jù)模型進(jìn)行鍵值綁定及事件處理,通過(guò)模型集合器提供一套豐富的用于枚舉功能,通過(guò)視圖來(lái)進(jìn)行事件處理及與現(xiàn)有的通過(guò)接口進(jìn)行交互。 本人兼職前端付費(fèi)技術(shù)顧問(wèn),如需幫助請(qǐng)加本人微信hawx1993或QQ345823102,非誠(chéng)勿擾 1.為初學(xué)前端而不知道怎么做項(xiàng)目的你指導(dǎo) 2.指導(dǎo)并扎實(shí)你的JavaScript基礎(chǔ) 3.幫你準(zhǔn)備面試并提供相關(guān)指導(dǎo)性意見(jiàn) 4.為你的前端之路提供極具建設(shè)性的...
摘要:實(shí)際上,可以將其理解為某種形式的繼承。如果上下文是,則使用全局對(duì)象代替。例如的第個(gè)參數(shù)是上下文,后續(xù)是實(shí)際傳入的參數(shù)序列中允許更換上下文是為了共享狀態(tài),尤其是在事件回調(diào)中。 公開(kāi)記錄學(xué)習(xí)JS MVC,不知道能堅(jiān)持多久= =。以《基于MVC的JavaScript web富應(yīng)用開(kāi)發(fā)》為主要學(xué)習(xí)資料。接上一篇類的學(xué)習(xí),發(fā)現(xiàn)實(shí)在是看暈了,有些例子是能看懂在干嘛,但是不知道為什么這樣做,有的甚至...
摘要:基于函數(shù)進(jìn)行調(diào)用的,用來(lái)確保函數(shù)是在指定的值所在的上下文中調(diào)用的。添加私有函數(shù)目前上面為類庫(kù)添加的屬性都是公開(kāi)的,可以被隨時(shí)修改。以基于的富應(yīng)用開(kāi)發(fā)為主要學(xué)習(xí)資料。 控制類庫(kù)的作用域 在類和實(shí)例中都添加proxy函數(shù),可以在事件處理程序之外處理函數(shù)的時(shí)候保持類的作用域。下面是不用proxy的辦法: var Class = function(parent){ var klas...
閱讀 1357·2021-09-02 10:19
閱讀 1101·2019-08-26 13:25
閱讀 2108·2019-08-26 11:37
閱讀 2413·2019-08-26 10:18
閱讀 2676·2019-08-23 16:43
閱讀 2989·2019-08-23 16:25
閱讀 775·2019-08-23 15:53
閱讀 3297·2019-08-23 15:11