JavaScript事件機制詳解

2021-07-10 12:54:44 字數 2811 閱讀 8642

一、事件處理程式

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...