摘要:所有節(jié)點中都包含這兩個方法,并且它們都接受個參數(shù)要處理的事件名,作為事件處理程序的函數(shù)和一個布爾值。和支持這個事件。
事件 事件流
事件流描述的是從頁面中接收事件的順序
事件冒泡IE的事件流叫做事件冒泡,即事件開始時由最具體的元素(文檔中嵌套層次最深的那個節(jié)點)接收,然后逐級向上傳播到較為不具體的節(jié)點
事件捕獲的思想是不太具體的節(jié)點應(yīng)該更早接收到事件,而最具體的節(jié)點應(yīng)該最后接收到事件,事件捕獲的用意在于在事件到達預(yù)定目標之前捕獲它。
DOM2級事件規(guī)定的事件流包括三個階段:事件捕獲階段,處于目標階段和事件冒泡階段
某個元素支持的每種事件都可以使用一個與相應(yīng)事件處理程序同名的HTML特性來指定,這個特性的值應(yīng)該是能夠執(zhí)行的JavaScript代碼
DOM0級事件處理程序
每個元素,包括window和document都有自己的事件處理程序?qū)傩裕@些屬性通常全部小寫
var btn=document.getElementById("myBtn"); btn.onclick=function(){ alert("Clicked"); };DOM2級事件處理程序
DOM2級事件定義了兩個方法,用于處理指定和刪除事件處理程序的操作,addEventListener()和removeEventListener()。所有DOM節(jié)點中都包含這兩個方法,并且它們都接受3個參數(shù):要處理的事件名,作為事件處理程序的函數(shù)和一個布爾值。最后這個布爾值參數(shù)如果是true,表示在捕獲階段調(diào)用事件處理程序,如果是false,表示在冒泡階段調(diào)用事件處理程序
var btn=document.getElementById("myBtn"); btn.addEventListener("click",function()){ alert(this.id); },false); btn.addEventListener("click",function(){ alert("Hello world!"); },false)
通過addEventListener()添加的事件處理程序只能使用removeEventListener()來移除,移除時傳入的參數(shù)與添加處理程序時使用的參數(shù)相同,這也意味著通過addEventListener()來添加的匿名函數(shù)將無法移除
IE事件處理程序IE實現(xiàn)了與DOM中蕾西的兩個方法,attachEvent()和detachEvent()。這兩個方法接收相同的兩個參數(shù),事件處理程序和事件處理程序函數(shù)
跨瀏覽器的事件處理程序要保證處理事件的代碼能在大多數(shù)瀏覽器下一致地運行,只需關(guān)注冒泡階段
第一個要創(chuàng)建的方法是addHandler(),它的職責是視情況分別使用DOM0級方法,DOM2級方法或IE方法來添加時間,這個方法屬于一個名叫EventUtil的對象。addHandler()方法接收3個參數(shù):要操作的元素、事件名稱和事件處理程序函數(shù)
與addHandler()對應(yīng)的方法是removeHandler()它也接收相同的參數(shù),這個方法的職責是移除之前添加的事件處理程序,無論事件處理程序時采取什么方式添加到元素中的,如果其他方法無效,默認采用DOM0級方法
事件對象 DOM中的事件對象兼容DOM的瀏覽器會將一個event對象傳入到事件處理程序中,無論指定事件處理程序使用什么方法,都會傳入event對象
DOM3級事件規(guī)定以下幾類事件
UI事件,當用戶與頁面上的元素交互時觸發(fā)
焦點事件,當元素獲得或失去焦點時觸發(fā)
鼠標事件,當用戶通過鼠標在頁面上執(zhí)行操作時觸發(fā)
滾輪事件,當使用鼠標滾輪時觸發(fā)
文本事件,當在文檔中輸入文本時觸發(fā)
鍵盤事件,當用戶通過鍵盤在頁面上執(zhí)行操作時觸發(fā)
合成事件,當為IME輸入字符時觸發(fā)
變動事件,當?shù)讓覦OM結(jié)構(gòu)發(fā)生變化時觸發(fā)
變動名稱事件,當元素或?qū)傩悦儎訒r觸發(fā),已廢棄
UI事件
UI事件指的是那些不一定與用戶操作有關(guān)的事件
DOMActivate,表示元素已經(jīng)被用戶操作,通過鼠標或鍵盤激活
load,當頁面完全加載后在window上面觸發(fā),當所有的框架都加載完畢時在框架集上面觸發(fā),當圖像加載完畢時在元素上觸發(fā),或者嵌入的內(nèi)容加載完畢時在
unload,當頁面完全卸載后在window上面觸發(fā),當左右框架都卸載后在框架上面觸發(fā),或者當嵌入的內(nèi)容卸載完畢后在
abort,在用戶停止下載過程時,如果嵌入的內(nèi)容沒有加載完,則在
error,當大聲在JavaScript錯誤時在window上面觸發(fā),當無法加載圖像時在元素上面觸發(fā),當無法加載嵌入內(nèi)容時,在
select,當用戶選擇文本框中一個或多個字符時觸發(fā)
resize,當窗口或框架的大小變化時在window或框架上面觸發(fā)
scroll,當用戶滾動帶滾動條的元素中的內(nèi)容時,在該元素上面觸發(fā),
元素匯總包含所加載頁面的滾動條 焦點事件
焦點事件會在頁面元素獲得或失去焦點時觸發(fā)
blur,在元素失去焦點時觸發(fā),事件不會冒泡,所有瀏覽器都支持
DOMFocusIn,在元素獲得焦點時觸發(fā),這個時間與HTML事件focus等價,但是冒泡,只有Opera支持這個事件,DOM3級事件廢棄了DOMFocusIn,選擇了focusin
DOMFocusOut,在元素失去焦點時觸發(fā),這個事件是HTML事件blur的通用版本,室友Opera支持這個事件,DOM3級事件廢棄了DOMFocusOut,選擇了focusout
focus,在元素獲得焦點時觸發(fā),這個事件不會冒泡,所有瀏覽器都支持它
focusin,在元素獲得焦點時觸發(fā),這個事件與HTML事件focus等價,但它冒泡,支持這個事件的瀏覽器有IE5.5+、Safari5.1+、Opera11.5+和Chrome
focusout,在元素失去焦點時觸發(fā),這個事件是HTML事件blur的通用版本,支持這個事件的瀏覽器有IE5.5+、Safari5.1+、Opera11.5+和Chrome
當焦點從頁面中的一個元素移動到另一個元素
focusout在失去焦點的元素上觸發(fā)
focusin在獲得焦點的元素上觸發(fā)
blur在失去焦點的元素上觸發(fā)
DOMFocusOut在失去焦點的元素上觸發(fā)
focus在獲得焦點的元素上觸發(fā)
DOMFocusIn在獲得焦點的元素上觸發(fā)
鼠標與滾輪事件
鼠標事件是Web開發(fā)中最常用的一類事件
click,在用戶單擊主鼠標按鈕(一般是左邊的按鈕)或者按下回車鍵時觸發(fā)。這一點對確保易訪問性很重要,意味著 onclick 事件處理程序既可以通過鍵盤也可以通過鼠標執(zhí)行。
dblclick,在用戶雙擊主鼠標按鈕(一般是左邊的按鈕)時觸發(fā)。從技術(shù)上說,這個事件并不是 DOM2 級事件規(guī)范中規(guī)定的,但鑒于它得到了廣泛支持,所以 DOM3 級事件將其納入了標準。
mousedown,在用戶按下了任意鼠標按鈕時觸發(fā)。不能通過鍵盤觸發(fā)這個事件。
mouseenter,在鼠標光標從元素外部首次移動到元素范圍之內(nèi)時觸發(fā)。這個事件不冒泡,而且在光標移動到后代元素上不會觸發(fā)。DOM2 級事件并沒有定義這個事件,但 DOM3 級事件將它納入了規(guī)范。IE、Firefox 9+和 Opera 支持這個事件。
mouseleave,在位于元素上方的鼠標光標移動到元素范圍之外時觸發(fā)。這個事件不冒泡,而且在光標移動到后代元素上不會觸發(fā)。DOM2 級事件并沒有定義這個事件,但 DOM3 級事件將它納入了規(guī)范。IE、Firefox 9+和 Opera 支持這個事件。
mousemove,當鼠標指針在元素內(nèi)部移動時重復地觸發(fā)。不能通過鍵盤觸發(fā)這個事件。
mouseout,在鼠標指針位于一個元素上方,然后用戶將其移入另一個元素時觸發(fā)。又移入的另一個元素可能位于前一個元素的外部,也可能是這個元素的子元素。不能通過鍵盤觸發(fā)這個事件。
mouseover,在鼠標指針位于一個元素外部,然后用戶將其首次移入另一個元素邊界之內(nèi)時觸發(fā)。不能通過鍵盤觸發(fā)這個事件。
mouseup,在用戶釋放鼠標按鈕時觸發(fā)。不能通過鍵盤觸發(fā)這個事件。
發(fā)生位置
客戶區(qū)坐標位置,clientX和clientY
頁面坐標位置,pageX和pageY
屏幕坐標位置,screenX和screenY
修改鍵
規(guī)定4個屬性,shiftKey、ctrlKey、altKey和metaKey
這些屬性中包含的都是布爾值,如果相應(yīng)的鍵被按下,則值為true,否則為false
鼠標按鈕
0,表示沒有按下按鈕
1,表示按下了主鼠標按鈕
2,表示按下了次鼠標按鈕
3,表示同時按下了主、次鼠標按鈕
4,表示按下了中間的鼠標按鈕
5,表示同時按下了主鼠標按鈕和中間的鼠標按鈕
6,表示同時按下了次鼠標按鈕和中間的鼠標按鈕
7,表示同時按下了三個鼠標按鈕
更多的事件信息
altLeft,布爾值,表示是否按下了Alt鍵,如果altLeft值為true,則altKey值也為true
ctrlLeft,布爾值,表示是否按下了Ctrl鍵,如果ctrlLeft值為true,則ctrlKey值為true
offsetX,光標相對于目標元素邊界的x坐標
offsetY,光標相對于目標元素邊界的y坐標
shiftLeft,布爾值,表示是否按下了Shift鍵,如果shiftLeft值為true,則shiftKey值為true
鼠標滾輪事件
與mousewheel事件對應(yīng)的event對象除包含鼠標事件的所有標準信息外,還包含一個特殊的wheelDelta屬性,當用戶向前滾動鼠標滾輪時,wheelDelta是120的倍數(shù),當用戶向后滾動鼠標滾輪時,wheelDelta是-120的倍數(shù)
觸摸設(shè)備
不支持dbclick事件,雙擊瀏覽器窗口會放大畫面,而且沒有辦法改變該行為
輕擊可單擊元素會觸發(fā)mousemove事件,如果此操作會導致內(nèi)容變化,將不再有其他事件發(fā)生,如果屏幕沒有因此變化,那么會一次發(fā)生mousedown、mouseup和click事件,輕擊不可單擊的元素不會觸發(fā)任何事件,可單擊的元素指的是那些單擊可產(chǎn)生默認操作得元素,或者那些已經(jīng)被指定了onclick事件處理程序的元素
mousemove事件也會觸發(fā)mouseover和mouseout事件
兩個手指放在屏幕上且頁面隨手指移動而滾動時會觸發(fā)mousewheel和scroll事件
鍵盤與文本事件
3個鍵盤事件
keydown,當用戶按下鍵盤上的任意鍵時觸發(fā),而且如果按住不放的話,會重復觸發(fā)此事件
keypress,當用戶按下鍵盤上的字符鍵時觸發(fā),而且如果按住不放的話,會重復觸發(fā)此事件
keyup,當用戶釋放鍵盤上的鍵時觸發(fā)
鍵碼
textInput事件,event對象上一個屬性,叫inputMethod,表示把文本輸入到文本框中的方式
0,表示瀏覽器不確定是怎么輸入的
1,表示是使用鍵盤輸入的
2,表示文本是粘貼進來的
3,表示文本是拖放進來的
4,表示文本是使用IME輸入的
5,表示文本是通過在表單中選擇某一項輸入的
6,表示文本是通過手寫輸入的
7,表示文本是通過語音輸入的
8,表示文本是通過幾種方法組合輸入的
9,表示文本是通過腳本輸入的
復合事件
用于處理IME的輸入序列
compositionstart,在IME的文本復合系統(tǒng)打開時觸發(fā),表示要開始輸入了
compositionupdate,在向輸入字段中插入新字符時觸發(fā)
compositionend,在IME的文本復合系統(tǒng)關(guān)閉時觸發(fā),表示返回正常鍵盤輸入狀態(tài)
復合事件與文本事件在很多方面都很相似,在觸發(fā)復合事件時,目標是接收文本的輸入字段,但它比文本事件的事件對象多一個屬性data
如果compositionstart事件發(fā)生時訪問,包含正在編輯的文本
如果在compositionupdate事件發(fā)生時訪問,包含正插入的新字符
如果在compositionend事件發(fā)生時訪問,包含此次輸入會話中插入的所有字符
變動事件
在DOM中的某一部分發(fā)生變化時給出提示,變動事件是為XML或HTML DOM設(shè)計的,并不特定某種語言
DOMSubtreeModified,在DOM結(jié)構(gòu)中發(fā)生任何變化時觸發(fā),這個事件在其他任何事件觸發(fā)后都會觸發(fā)
DOMNodeInserted,在一個節(jié)點作為子節(jié)點被插入到另一個節(jié)點中時觸發(fā)
DOMNodeRemoved,在節(jié)點從其父元素中被移除時觸發(fā)
DOMNodeInsertedIntoDocument,在一個節(jié)點被直接插入文檔或通過子樹間接插入文檔之后觸發(fā)
DOMNodeRemovedFromDocument,在一個節(jié)點被直接從文檔中移除或通過子樹間接從文檔中移除之前觸發(fā)
DOMAttrModified,在特性被修改之后觸發(fā)
DOMCharacterDataModified,在文本節(jié)點的值發(fā)生變化時觸發(fā)
刪除節(jié)點
在使用removeChild()或replaceChild()從DOM中刪除節(jié)點時,首先會觸發(fā)DOMNodeRemoved事件
緊隨其后觸發(fā)的是DOMSubtreeModified事件,這個事件的目標是被移除節(jié)點的父節(jié)點,此時的event對象也不會提供與事件相關(guān)的其他信息
插入節(jié)點
在使用appendChild()、replaceChild()或insertBefore()向DOM中插入節(jié)點時,首先會觸發(fā)DOMNodeInserted事件,這個事件的目標是被插入的節(jié)點
緊接著會在新插入的節(jié)點上面觸發(fā)DOMNodeInsertedIntDocument事件,這個事件不冒泡,因此必須在插入節(jié)點之前為它添加這個事件處理程序
最后一個觸發(fā)的是DOMSubtreeModified,觸發(fā)于新插入節(jié)點的父節(jié)點
HTML5事件contextmenu事件,用以表示何時應(yīng)該顯示上下文菜單,以便開發(fā)人員取消默認的上下文菜單而提供自定義的菜單
beforeunload事件,為了讓開發(fā)人員有可能在頁面卸載前阻止這一個操作,這個事件會在瀏覽器卸載頁面之前觸發(fā),可以通過它來取消卸載并繼續(xù)使用原有頁面
readystatechange事件,目的是提供與文檔或元素加載狀態(tài)有關(guān)的信息,但這個事件的行為有時候也難預(yù)料,支持readystatechange事件的每個對象都有一個readyState屬性
uninitialized,對象存在但尚未初始化
loading,對象正在加載數(shù)據(jù)
loaded,對象加載數(shù)據(jù)完成
interactive,可以操作對象了,但還沒有完全加載
complete,對象已經(jīng)加載完畢
pageshow事件,在頁面顯示時觸發(fā),無論該頁面是否來自bfcache,在重新加載的頁面中,pageshow會在load事件觸發(fā)后觸發(fā),而對于bfcache中的頁面,pageshow會在頁面狀態(tài)完全恢復的那一刻觸發(fā)
pagehide事件,在瀏覽器卸載頁面的時候觸發(fā),而且是在unload事件之前觸發(fā),與pageshow事件一樣,pagehide在document上面觸發(fā),但其事件處理程序必須要添加到window對象
hashchange事件,在URL參數(shù)列表發(fā)生變化時,通知開發(fā)人員。之所以新增這個事件,是因為在Ajax應(yīng)用中,開發(fā)人員經(jīng)常要利用URL參數(shù)列表來保存狀態(tài)或?qū)Ш叫畔?/p> 設(shè)備事件
orientationchange事件,以便開發(fā)人員能夠確定用戶何時將設(shè)備由橫向查看模式切換為縱向查看模式。0表示肖像模式,90表示向左旋轉(zhuǎn)的橫向模式,-90表示向右旋轉(zhuǎn)的橫向模式
MozOrientation事件,當設(shè)備的加速計檢測到設(shè)備方向改變時,就會觸發(fā)這個事件
event對象包含三個屬性,x、y、z,這幾個屬性的值都介于1到-1之間,表示不同坐標軸上的方向。在靜止狀態(tài)下,x值為0,y值為0,z值為1。如果設(shè)備向右傾斜,x值會減小;反之向左傾斜,x值會增大。類似的,如果設(shè)備向遠離用戶的方向傾斜,y值會減小,向接近用戶的方向傾斜,y值會增大。z軸檢測垂直加速度,1表示靜止不動,在設(shè)備移動時,值會減小,失重狀態(tài)下值為0
deviceorientation事件與Mozorientation事件類似,它也是在加速計檢測到設(shè)備方向變化時,在window對象上觸發(fā),而且具有與MozOrientation事件相同的支持限制。不過deviceorientation事件的意圖是告訴開發(fā)人員設(shè)備在空間中朝向哪兒,而不是如何移動
觸發(fā)deviceorientation事件時,事件對象中包含著每個軸相對于設(shè)備靜止狀態(tài)下發(fā)生變化的信息,包含5個屬性
alpha,在圍繞z軸旋轉(zhuǎn)時(左右旋轉(zhuǎn)),y軸的度數(shù)差,是一個介于0到360之間的浮點數(shù)
beta,在圍繞x軸旋轉(zhuǎn)時(前后旋轉(zhuǎn)),z軸的度數(shù)差,是一個介于-180到180度之間的浮點數(shù)
gamma,在圍繞y軸旋轉(zhuǎn)時(扭轉(zhuǎn)設(shè)備),z軸的度數(shù)差,是一個介于-90到90之間的浮點數(shù)
absolute,布爾值,表示設(shè)備是否返回一個絕對值
compassCalibrated,布爾值,表示設(shè)備的指南針是否校準過
devicemotion事件,告訴開發(fā)人員設(shè)備什么時候移動,而不僅僅是設(shè)備方向如何改變
acceleration,一個包含x、y和z屬性的對象,在不考慮重力的情況下,說明每個方向上的加速度
accelerationIncludingGravuty,一個包含x、y和z屬性的對象,在考慮z軸自然重力加速度的情況下,說明每個方向上的加速度
interval,以毫秒表示的時間值,必須在另一個devicemotion事件觸發(fā)前傳入,這個值在每個事件中應(yīng)該是一個常量
rotationRate,一個包含表示方向的alpha、beta和gamma屬性的對象
觸摸與手勢事件
觸摸事件
touchstart,當手指觸摸屏幕時觸發(fā);即使已經(jīng)有一個手指放在了屏幕上也會觸發(fā)。
touchmove,當手指在屏幕上滑動時連續(xù)地觸發(fā)。在這個事件發(fā)生期間,調(diào)用 preventDefault()可以阻止?jié)L動。
touchend,當手指從屏幕上移開時觸發(fā)。
touchcancel :當系統(tǒng)停止跟蹤觸摸時觸發(fā)。關(guān)于此事件的確切觸發(fā)時間,文檔中沒有明確說明。
除了常見的DOM屬性之外,觸摸事件還包含三個用于跟蹤觸摸的屬性
touches,表示當前跟蹤的觸摸操作的 Touch 對象的數(shù)組。
targetTouchs,特定于事件目標的 Touch 對象的數(shù)組。
changeTouches,表示自上次觸摸以來發(fā)生了什么改變的 Touch 對象的數(shù)組。
每個Touch對象包含下列屬性
clientX,觸摸目標在視口中的 x 坐標。
clientY,觸摸目標在視口中的 y 坐標。
identifier,標識觸摸的唯一 ID。
pageX,觸摸目標在頁面中的 x 坐標。
pageY,觸摸目標在頁面中的 y 坐標。
screenX,觸摸目標在屏幕中的 x 坐標。
screenY,觸摸目標在屏幕中的 y 坐標。
target,觸摸的 DOM 節(jié)點目標。
手勢事件
gesturestart,當一個手指已經(jīng)按在屏幕上而另一個手指又觸摸屏幕時觸發(fā)。
gesturechange,當觸摸屏幕的任何一個手指的位置發(fā)生變化時觸發(fā)。
gestureend,當任何一個手指從屏幕上面移開時觸發(fā)。
內(nèi)存和性能 事件委托
對"事件處理程序過多"問題的解決方案,就是事件委托。事件委托利用了事件冒泡,只指定一個事件處理程序,就可以管理某一類型的所有事件
var item1 = document.getElementById("goSomewhere"); var item2 = document.getElementById("doSomething"); var item3 = document.getElementById("sayHi"); EventUtil.addHandler(item1, "click", function(event){ location.; }); EventUtil.addHandler(item2, "click", function(event){ document.title = "I changed the document"s title"; }); EventUtil.addHandler(item3, "click", function(event){ alert("hi"); });模擬事件 DOM中的事件模擬
可以在document對象上使用createEvent()方法創(chuàng)建event對象,這個方法就是接收一個參數(shù),即表示要創(chuàng)建的事件類型的字符串
UIEvents,一般化的UI事件,鼠標事件和鍵盤事件都繼承自UI事件,DOM3級中是UIEvent
MouseEvents,一般化的鼠標事件,DOM3級中是MouseEvent
MutationEvents,一般化的DOM變動事件,DOM3級中是MutationEvent
HTMLEvents,一般化的HTML事件,沒有對應(yīng)的DOM3級事件
模擬鼠標事件
type(字符串),表示要觸發(fā)的事件類型,例如 "click" 。
bubbles(布爾值),表示事件是否應(yīng)該冒泡。為精確地模擬鼠標事件,應(yīng)該把這個參數(shù)設(shè)置為true 。
cancelable(布爾值),表示事件是否可以取消。為精確地模擬鼠標事件,應(yīng)該把這個參數(shù)設(shè)置為 true 。
view(AbstractView),與事件關(guān)聯(lián)的視圖。這個參數(shù)幾乎總是要設(shè)置為 document.defaultView 。
detail(整數(shù)),與事件有關(guān)的詳細信息。這個值一般只有事件處理程序使用,但通常都設(shè)置為 0 。
screenX(整數(shù)),事件相對于屏幕的 X 坐標。
screenY(整數(shù)),事件相對于屏幕的 Y 坐標。
clientX(整數(shù)),事件相對于視口的 X 坐標。
clientY(整數(shù)),事件想對于視口的 Y 坐標。
ctrlKey(布爾值),表示是否按下了 Ctrl 鍵。默認值為 false 。
altKey(布爾值),表示是否按下了 Alt 鍵。默認值為 false 。
shiftKey(布爾值),表示是否按下了 Shift 鍵。默認值為 false 。
metaKey(布爾值),表示是否按下了 Meta 鍵。默認值為 false 。
button(整數(shù)),表示按下了哪一個鼠標鍵。默認值為 0 。
relatedTarget(對象),表示與事件相關(guān)的對象。這個參數(shù)只在模擬 mouseover 或 mouseout時使用。
var btn = document.getElementById("myBtn"); //創(chuàng)建事件對象 var event = document.createEvent("MouseEvents"); //初始化事件對象 event.initMouseEvent("click", true, true, document.defaultView, 0, 0, 0, 0, 0, false, false, false, false, 0, null); //觸發(fā)事件 btn.dispatchEvent(event);
模擬鍵盤事件
type(字符串),表示要觸發(fā)的事件類型,如 "keydown" 。
bubbles(布爾值),表示事件是否應(yīng)該冒泡。為精確模擬鼠標事件,應(yīng)該設(shè)置為 true 。
cancelable(布爾值),表示事件是否可以取消。為精確模擬鼠標事件,應(yīng)該設(shè)置為 true 。
view(AbstractView) ,與事件關(guān)聯(lián)的視圖。這個參數(shù)幾乎總是要設(shè)置document.defaultView 。
key(布爾值),表示按下的鍵的鍵碼。
location(整數(shù)),表示按下了哪里的鍵。0 表示默認的主鍵盤,1 表示左,2 表示右,3 表示數(shù)字鍵盤,4 表示移動設(shè)備(即虛擬鍵盤),5 表示手柄。
modifiers(字符串),空格分隔的修改鍵列表,如 "Shift" 。
repeat(整數(shù)),在一行中按了這個鍵多少次。
var textbox = document.getElementById("myTextbox"), event; //以 DOM3 級方式創(chuàng)建事件對象 if (document.implementation.hasFeature("KeyboardEvents", "3.0")){ event = document.createEvent("KeyboardEvent"); //初始化事件對象 event.initKeyboardEvent("keydown", true, true, document.defaultView, "a", 0, "Shift", 0); } //觸發(fā)事件 textbox.dispatchEvent(event);
在Firefox中,調(diào)用createEvent()并傳入"KeyEvents"就可以創(chuàng)建一個鍵盤事件,返回的事件對象會包含一個initKeyEvent()方法,接收10個參數(shù)
type(字符串),表示要觸發(fā)的事件類型,如 "keydown" 。
bubbles(布爾值),表示事件是否應(yīng)該冒泡。為精確模擬鼠標事件,應(yīng)該設(shè)置為 true 。
cancelable(布爾值),表示事件是否可以取消。為精確模擬鼠標事件,應(yīng)該設(shè)置為 true 。
view(AbstractView) ,與事件關(guān)聯(lián)的視圖。這個參數(shù)幾乎總是要設(shè)置為 document.default-View 。
ctrlKey(布爾值),表示是否按下了 Ctrl 鍵。默認值為 false 。
altKey(布爾值),表示是否按下了 Alt 鍵。默認值為 false 。
shiftKey(布爾值),表示是否按下了 Shift 鍵。默認值為 false 。
metaKey(布爾值),表示是否按下了 Meta 鍵。默認值為 false 。
keyCode(整數(shù)),被按下或釋放的鍵的鍵碼。這個參數(shù)對 keydown 和 keyup 事件有用,默認值為 0 。
charCode(整數(shù)),通過按鍵生成的字符的 ASCII 編碼。這個參數(shù)對 keypress 事件有用,默認值為 0 。
//只適用于 Firefox var textbox = document.getElementById("myTextbox") // 創(chuàng)建事件對象 var event = document.createEvent("KeyEvents"); // 初始化事件對象 event.initKeyEvent("keypress", true, true, document.defaultView, false, false, false, false, 65, 65); //觸發(fā)事件 textbox.dispatchEvent(event);
要創(chuàng)建新的自定義事件,可以調(diào)用createEvent("CustomEvent"),接收4個參數(shù)
type(字符串),觸發(fā)的事件類型,例如 "keydown" 。
bubbles(布爾值),表示事件是否應(yīng)該冒泡。
cancelable(布爾值),表示事件是否可以取消。
detail(對象),任意值,保存在 event 對象的 detail 屬性中
var div = document.getElementById("myDiv"), event; EventUtil.addHandler(div, "myevent", function(event){ alert("DIV: " + event.detail); }); EventUtil.addHandler(document, "myevent", function(event){ alert("DOCUMENT: " + event.detail); }); if (document.implementation.hasFeature("CustomEvents", "3.0")){ event = document.createEvent("CustomEvent"); event.initCustomEvent("myevent", true, false, "Hello world!"); div.dispatchEvent(event); }IE中的事件模擬
模擬一個按鈕觸發(fā)click事件過程
var btn = document.getElementById("myBtn"); //創(chuàng)建事件對象 var event = document.createEventObject(); //初始化事件對象 event.screenX = 100; event.screenY = 0; event.clientX = 0; event.clientY = 0; event.ctrlKey = false; event.altKey = false; event.shiftKey = false; event.button = 0; //觸發(fā)事件 btn.fireEvent("onclick", event);
模擬keypress事件
var textbox = document.getElementById("myTextbox"); //創(chuàng)建事件對象 var event = document.createEventObject(); //初始化事件對象 event.altKey = false; event.ctrlKey = false; event.shiftKey = false; event.keyCode = 65; //觸發(fā)事件 textbox.fireEvent("onkeypress", event);
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/97889.html
錯誤處理與調(diào)試 錯誤處理 try-catch語句 try{ //可能會導致錯誤的代碼 }catch(error){ //在錯誤發(fā)生時怎么處理 } 發(fā)生錯誤時可以顯示瀏覽器給出的信息 try{ window.someNonexistentFunction(); }catch(error){ alert(error.message); } 在try-catch語句中是可選的,但...
摘要:腳本編程跨文檔消息傳遞跨文檔消息傳送,簡稱為,指的是來自不同域的頁面間傳遞消息的核心是方法,在規(guī)范中,除了部分之外的其他部分也會提到這個方法名,但都是為了同一個目的,向另一個地方傳遞參數(shù)。第一個頁面加載時為空 HTML5腳本編程 跨文檔消息傳遞 跨文檔消息傳送,簡稱為XMD,指的是來自不同域的頁面間傳遞消息 XMD的核心是postMessage()方法,在HTML5規(guī)范中,除了XDM...
摘要:簡介簡史誕生于年,當時主要負責表單的輸入驗證。實現(xiàn)一個完整的由三部分組成核心文檔對象模型瀏覽器對象模型就是對實現(xiàn)該標準規(guī)定的各個方面內(nèi)容的語言的描述。把整個頁面映射為一個多層節(jié)點結(jié)構(gòu)。由萬維網(wǎng)聯(lián)盟規(guī)劃。主要目標是映射文檔的結(jié)構(gòu)。 JavaScript簡介 JavaScript簡史 JavaScript誕生于1995年,當時主要負責表單的輸入驗證。 如果沒有表單驗證的功能,填入信息之...
摘要:事件,當文檔從可見變?yōu)椴豢梢娀驈牟豢梢娮優(yōu)榭梢姇r,觸發(fā)該事件要為兩個事件都指定事件處理程序?qū)ο蟀瑐€方法,接收個參數(shù)成功回調(diào)函數(shù)可選的失敗回調(diào)函數(shù)可選的選項對象。,事件已經(jīng)發(fā)生且執(zhí)行完所有事件處理程序的時間。 新興的API requestAnimationFrame() 早期動畫循環(huán) 基本動畫循環(huán) (function(){ function updateAnimations(){...
表單腳本 表單的基礎(chǔ)知識 HTMLFormElement有自己獨特的屬性和方法 acceptCharset,服務(wù)器能夠處理的字符集,等價于HTML中的accept-charset特性 action,接受請求的URL,等價于HTML中的action特性 elements,表單中所有控件的集合 enctype,請求的編碼類型,等價于HTML中的enctype特性 length,表單中控件的數(shù)量 m...
閱讀 1217·2023-04-25 20:31
閱讀 3723·2021-10-14 09:42
閱讀 1494·2021-09-22 16:06
閱讀 2660·2021-09-10 10:50
閱讀 3529·2021-09-07 10:19
閱讀 1778·2019-08-30 15:53
閱讀 1176·2019-08-29 15:13
閱讀 2823·2019-08-29 13:20