一、事件處理程式
a. dom0級事件處理程式,被認為是元素的方法。
var btn=document.getelementbyid('mybtn');
btn.οnclick=function();
在事件處理程式中,通過this訪問元素的任何屬性和方法。
b. dom2級事件處理程式
dom2級事件定義了兩個方法,用於處理指定和刪除事件處理程式的操作:addeventlistener( )和removeeventlistener( )。所有節點都包含這兩個方法,都接受3個引數:要處理的事件名、作為事件處理程式的函式和乙個布林值。如果這個布林值為true,表示在捕獲階段呼叫事件處理程式;如果這個布林值為false,表示在冒泡階段呼叫事件處理程式。
obj.addeventlistener('click',function(),true);
obj.addeventlistener('click',function(),false);
使用dom2級方法新增事件處理程式的主要好處是可以新增多個事件處理程式,並按照新增順序觸發。
通過addeventlistener( )新增的事件處理程式只能使用removeeventlistener()來移除,移除時傳入的引數與新增處理程式時使用的引數相同。因此,通過addeventlistener( )新增的匿名函式將無法刪除。
var btn=document.getelementbyid('mybtn');
btn.addeventlistener('click',function(),false);
//此時removeeventlister方法無效,因為function是匿名函式,與addeventlistener中的不同。
btn.removeeventlistener('click',function(),false);
正確方式:
var btn=document.getelementbyid('mybtn');
var handle =function();
btn.addeventlistener('click',handle,false);
//此時removeeventlistener有效
btn.removeeventlistener('click',handle,false);
ie9,firefox,safari,chrome和opera支援dom2級事件處理程式。
c. ie事件處理程式
ie實現了與dom中類似的兩個方法:attachevent( )和detachevent()。這兩個方法相同的兩個引數:事件處理程式名稱與事件處理程式函式。ie8級之前版本只支援事件冒泡,所以通過attachevent( )新增的時間處理程式都會被新增到冒泡階段。
var btn=document.getelementbyid('mybtn');
var handle =function();
btn.attachevent('onclick',handle);
注意:在通過detachevent( )來移除使用attachevent()新增的事件時,條件是必須提供相同的引數,與dom方法一樣,新增的匿名函式也不能被移除。
在ie中使用attachevent()與使用dom0級方法的主要區別在於事件處理程式的作用域。dom0級方法中,事件處理程式會在其所屬元素的作用域內執行,在使用attachevent()方法時,事件處理程式會在全域性作用域中執行,因此,this等於window。
二、 ie與firefox的事件機制區別
ie8及以前版本
firefox即ie9+
事件處理方法
attachevent( )和detachevent( )
addeventlistener( )和removeeventlistener()
接受引數
兩個:事件處理程式名稱和事件處理程式函式
三個:事件處理程式名稱,事件處理程式函式,布林值
支援事件型別
僅支援事件冒泡
支援事件冒泡和事件捕獲
第乙個引數
需在事件前新增on,例如onclick
不需在事件前新增on,例如click
為乙個元素新增多個事件處理程式執行順序
按照與新增順序相反的順序執行,即後新增,先執行
按照新增順序執行,即先新增,先執行
移除事件,引數設定
detachevent( )中的引數需與attachevent( )傳入的引數一致,即兩個引數
removeeventlistener( )中的引數addeventlistener( )傳入的引數一致,即要三個引數
三、跨瀏覽器的事件處理程式
var eventutil = else if(element.attachevent)else,
removehandle:function(element,type,handle) else if (element.detachevent) else
}} };
var btn=document.getelementbyid('mybtn');
var handle = function();
eventutil.addhandler(btn,"click",handle);
eventutil.removehandle(btn,"click",handle);
Javascript事件機制學習
js的事件機制 當行為動作滿足一定的條件後,會觸發某類事務的執行,主要結合js的函式來使用。主要內容 1 單雙擊事件 單擊 onclick 當滑鼠單擊的時候會觸發 雙擊 ondblclick 當滑鼠雙擊的時候會被觸發 2 滑鼠事件 onmouseover 當滑鼠懸停在某個html元素上的時候觸發 o...
javascript中事件流機制
1.js中事件流機制,分為三個階段,事件捕獲階段 處於目標階段 事件冒泡階段 2.事件捕獲階段,瀏覽器會從根節點開始由外到內進行事件傳播 事件傳播的順序是 window document div div 結點 通過函式新增 element.addeventlistener event,functio...
隨手筆記javascript篇 事件機制
事件從根節點開始,逐級派送到子節點,若節點繫結了事件動作,則執行動作,然後繼續走 firefox等瀏覽器 執行完捕獲階段後,事件由子節點往根節點派送,若節點繫結了事件動作,則執行動作,然後繼續走 ie瀏覽器 注意 然而在大多數瀏覽器使用同樣標準時,ie卻沒有使用,因而造就了相容問題。if windo...