摘要:事件類型布爾值,表示事件是否通過以冒泡形式觸發(fā)。表示鍵盤事件的屬性布爾值,表示當(dāng)前按下的鍵是否表示一個字符。表示當(dāng)前按鍵的值僅對事件有效。,事件發(fā)生時相對于屏幕的坐標(biāo)。
事件對象
event 對象還包含很多有用的屬性。W3C 范中包含的大部分屬性都列在下面,更多信息參照完整的標(biāo)準(zhǔn)規(guī)范。
事件類型:bubbles :布爾值,表示事件是否通過DOM 以冒泡形式觸發(fā)。
事件發(fā)生時,反映當(dāng)前環(huán)境信息的屬性:button :表示(如果有)鼠標(biāo)所按下的按鈕。
ctrlKey :布爾值,表示Ctrl 鍵是否按下。
altKey :布爾值,表示Alt 鍵是否按下。
shiftKey :布爾值,表示Shift 鍵是否按下。
metaKey :布爾值,表示Meta 鍵是否按下。
表示鍵盤事件的屬性:isChar :布爾值,表示當(dāng)前按下的鍵是否表示一個字符。
charCode :表示當(dāng)前按鍵的unicode 值(僅對keypress 事件有效)。
keyCode :表示非字符按鍵的unicode 值。
which :表示當(dāng)前按鍵的unicode 值,不管當(dāng)前按鍵是否表示一個字符。
事件發(fā)生時的環(huán)境參數(shù):pageX,pageY :事件發(fā)生時相對于頁面(如viewport 區(qū)域)的坐標(biāo)。
screenX,screenY :事件發(fā)生時相對于屏幕的坐標(biāo)。
和事件相關(guān)的元素:currentTarget :事件冒泡階段所在的當(dāng)前DOM 元素。
target,originalTrget :原始的DOM 元素。
relatedTarget :其他和事件相關(guān)的DOM 元素(如果有的話)。
不同的瀏覽器對這些屬性的兼容性也不同,尤其是那些不兼容W3C 的瀏覽器。
事件庫手動處理眾多瀏覽器的差異性吃力不討好。jQuery 的API 提供了bind()函數(shù)用來跨瀏覽器綁定事件監(jiān)聽。在一個jQuery 實(shí)例上調(diào)用此函數(shù),傳入事件名稱和回調(diào)函數(shù):
jQuery("#element").bind(eventName, handler);
給一個元素注冊點(diǎn)擊事件:
jQuery("#element").bind("click", function(event) { // ... });
jQuery 提供了一些常用事件的快捷方法,比如click、submit 和mouseover:
$("#myDiv").click(function(){ // ... });
注意: 使用這個方法之前要確保DOM 元素是存在的。例如,應(yīng)當(dāng)在頁面載入完成后綁定事件,因此需要綁定window 的load 事件,然后添加監(jiān)聽:
jQuery(window).bind("load", function() { $("#signinForm").submit(checkForm); });
比監(jiān)聽window 的load 事件更好的方法,即DOMContentLoaded。當(dāng)DOM 構(gòu)建完成時觸發(fā)這個事件,這時圖片和樣式表可能還未加載完畢。這也就是說這個事件一定會在用戶和頁面產(chǎn)生交互之前觸發(fā)。并不是所有的瀏覽器都支持DOMContentLoaded,因此jQuery 將它融入了ready() 函數(shù),這個函數(shù)是兼容各個瀏覽器的:
jQuery.ready(function($)){ $("#myForm"). bind("submit", function(){ /*...*/}); });
實(shí)際上,可以不用ready() 函數(shù)而直接將回調(diào)函數(shù)寫入jQuery 對象。
jQuery(function($){ // 當(dāng)頁面內(nèi)容可用時調(diào)用 });切換上下文
關(guān)于事件有一點(diǎn)經(jīng)常讓人感到迷惑就是調(diào)用事件回調(diào)函數(shù)時上下文的切換。當(dāng)使用瀏覽器內(nèi)置的addEventListener() 時,上下文從局部變量切換為目標(biāo)HTML 元素:
new function(){ this.appName = "wem"; document.body.addEventListener("click", function(e){ // 上下文發(fā)生改變,因此appName 是undefined alert(this.appName); }, false); };
要想保持原有的上下文,需要將回調(diào)函數(shù)包裝進(jìn)一個匿名函數(shù),然后定義一個引用指向它。即使用代理函數(shù)來保持當(dāng)前的上下文。這在jQuery 中也是一種很常用的模式,包括一個proxy() 函數(shù),只需將指定的上下文傳入函數(shù)即可:
$("signinForm").submit($.proxy(function(){ /* ... */ }, this));自定義事件
除了瀏覽器內(nèi)置的事件之外,也可以觸發(fā)和綁定自定義事件。這是架構(gòu)庫的一個好方法——也是jQuery 的大多數(shù)插件所使用的模式。大多數(shù)瀏覽器廠商均未實(shí)現(xiàn)W3C 標(biāo)準(zhǔn)中的自定義事件,可以使用諸如jQuery 或Prototype 的類庫來使用這個特性。jQuery 中可以使用trigger() 函數(shù)來觸發(fā)自定義事件??梢酝ㄟ^命名空間的形式來管理事件名稱,命名空間中的單詞用點(diǎn)號分隔,比如:
// 綁定自定義事件 $(".class").bind("refresh.widget",function(){}); // 觸發(fā)自定義事件 $(".class").trigger("refresh.widget");
通過給trigger() 傳入一個額外的參數(shù)來給事件處理程序傳入數(shù)據(jù)。數(shù)據(jù)會以附加參數(shù) 的形式帶入回調(diào):
$(".class").bind("frob.widget", function(event, dataNumber){ console.log(dataNumber); }); $(".class").trigger("frob.widget", 5);
和內(nèi)置事件一樣,自定義事件同樣會沿著DOM 樹做冒泡。
(公開記錄學(xué)習(xí)JS MVC,不知道能堅(jiān)持多久= =。以《基于MVC的JavaScript web富應(yīng)用開發(fā)》為主要學(xué)習(xí)資料。)
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/91486.html
摘要:事件是應(yīng)用程序的核心,是所有內(nèi)容的驅(qū)動。將對這兩種事件模型的支持都加入標(biāo)準(zhǔn)規(guī)范之中。根據(jù)型,事件首先被目標(biāo)元素所捕捉,然后向上冒泡。取消事件冒泡當(dāng)事件冒泡時,可以通過數(shù)來終止冒泡,這個函數(shù)是對象中的方法。 事件是 JavaScript 應(yīng)用程序的核心,是所有內(nèi)容的驅(qū)動。盡管后來W3C 對此做了標(biāo)準(zhǔn)化,但 IE 仍然堅(jiān)持使用與 W3C 不兼容的事件模型,直到 IE9 才遵循標(biāo)準(zhǔn)。有很多諸...
摘要:以基于的富應(yīng)用開發(fā)為主要學(xué)習(xí)資料。下面用實(shí)現(xiàn)一個例子使用匿名函數(shù)來封裝一個作用域在頁面加載時綁定事件監(jiān)聽上面的代碼創(chuàng)建了控制器,這個控制器是放在變量下的命名空間。然后用了一個匿名函數(shù)封裝了一個作用域,以避免對全局作用域造成污染。 公開記錄學(xué)習(xí)JS MVC,不知道能堅(jiān)持多久= =。以《基于MVC的JavaScript web富應(yīng)用開發(fā)》為主要學(xué)習(xí)資料。 什么是MVC MVC 是一種設(shè)...
摘要:它通過數(shù)據(jù)模型進(jìn)行鍵值綁定及事件處理,通過模型集合器提供一套豐富的用于枚舉功能,通過視圖來進(jìn)行事件處理及與現(xiàn)有的通過接口進(jìn)行交互。 本人兼職前端付費(fèi)技術(shù)顧問,如需幫助請加本人微信hawx1993或QQ345823102,非誠勿擾 1.為初學(xué)前端而不知道怎么做項(xiàng)目的你指導(dǎo) 2.指導(dǎo)并扎實(shí)你的JavaScript基礎(chǔ) 3.幫你準(zhǔn)備面試并提供相關(guān)指導(dǎo)性意見 4.為你的前端之路提供極具建設(shè)性的...
摘要:它由微軟架構(gòu)師和開發(fā),通過利用微軟圖形系統(tǒng)和的互聯(lián)網(wǎng)應(yīng)用派生品的特性來簡化用戶界面的事件驅(qū)動程序設(shè)計(jì)。微軟的和架構(gòu)師之一于年在他的博客上發(fā)表了。更改時會得到提醒這個情況是一個單向流。 前言 記得四個月前有一次面試,面試官問我 MVVM 是什么,MVVM 的本質(zhì)是什么。我大腦一片混亂,那時我對 MVVM 的認(rèn)知就只是雙向綁定和Vue,以這個關(guān)鍵字簡單回答了幾句,我反問 MVVM 的本質(zhì)是...
閱讀 2684·2021-11-16 11:53
閱讀 2749·2021-07-26 23:38
閱讀 2080·2019-08-30 15:55
閱讀 1760·2019-08-30 13:21
閱讀 3680·2019-08-29 17:26
閱讀 3314·2019-08-29 13:20
閱讀 884·2019-08-29 12:20
閱讀 3200·2019-08-26 10:21