標籤:ring get 尋找 blur clientx 目標 記錄 表單 事件冒泡
1.理解事件(2點)
- 事件行為本身:沒有給事件Binder 方法事件也是一直存在的,當觸發行為的時候,也對觸發對應的行為,只不過由於沒有綁定事件,導致沒有任何事件發生;
- 事件綁定:給元素繫結一個方法;觸發行為,執行方法;
2.DOM事件
- DOM0級事件:1??(onclick)屬於元素的私人屬性;2??使用DOM0級方法指定的事件處理常式被認為是元素的方法,這也就解釋為什麼事件處理常式的this指向當前元素(this的六點申明);3??事件處理常式只會在事件冒泡階段處理;4??優勢:簡單;跨瀏覽器;5??刪除事件:設定為null;btn.onclick=null;6??一個元素只能綁定一個同一類型的行為,否則後面的會覆蓋前面的行為。
- DOM1:沒有升級事件相關的方法;
- DOM2級事件:1??屬於公有方法,在eventTarget這個類的原型上—>所有的DOM節點都包含這兩種方法:addEventListener和removeEventlistener;2??三個參數:(事件名,回呼函數,布爾值);布爾值:true—>捕獲階段調用回呼函數;false—>冒泡階段調用回呼函數;3??addEventListener和removeEventlistener傳入的回呼函數必須相同,不能使用匿名函數;4??一般將事件添加到冒泡階段,這樣可以最大限度的相容瀏覽器。5??同一個元素可以綁定多個統一行為;
3.事件對象 *****執行某一行為時,不僅執行了Binder 方法,而且瀏覽器還會預設的給這個方法傳遞一個參數,這個參數就是—>event,事件對象。事件對象的特點:1??對象資料類型,包含有很多的屬性名稱和屬性值,用來記錄行為的相關資訊;2??MouseEvent——UIEvent——Event——Object 原型3??MouseEvent記錄的是頁面中唯一一個滑鼠每次觸發的相關資訊,和到底在哪個元素上觸發沒有關係。
4.事件對象的相容性問題
- 事件對象本身的相容性問題:e=e||window.event;
- e.type:當前行為類型,相容;
- e.clientX/Y:距離可視視窗左上方x,y值,相容;
- e.pageX/Y:距離body(第一屏)左上方x,y值,IE678不相容;
e.pageX=(document.documentElement.scrollLeft||document.body.scrollLeft)+ e.clientX;
- e.target:事件來源,當前行為觸發元素,儲存的就是那個元素IE678不相容,e.target=e.target||e.srcElement;
- e.preventDafault:阻止瀏覽器的預設行為,IE678不相容;e.preventDafault?e.preventDafault:e.returnvalue=false;
- e.stopPropagation:阻止事件冒泡傳播,IE678不相容;e.stopPropagation?e.stopPropagation:e.cancelBubble=true;
5.事件的傳播機制
- 捕獲:從外向內依次尋找元素,event capturing;
- 目標:當前述事件來源本省的操作;
- 冒泡:從內到外依次觸發的相關行為,event bubbing;
6.常見事件類型 1.滑鼠事件onclick onmouseover onmouseout onmouseenter onmouseleave ondbclick... 2.系統事件 onload onscroll onresize... 3.表單事件 onfocus onblur 4.鍵盤事件 onkeydown onkeyup onkeypress...
關於JS事件的幾點總結