javaScript之事件處理常式

來源:互聯網
上載者:User

標籤:事件處理   冒泡   事件   handler   導致   範圍鏈   地方   catch   ntb   

        事件就是使用者或瀏覽器自身執行的某個動作,JavaScript與HTML的互動也是通過事件實現的。而相應某個事件的函數就叫做事件處理函數。包括以下幾種:

1.HTML事件處理常式       

       某個元素支援的每種事件,都可以使用一個相應的事件處理常式相同的HTML特性指定。這個特性的值能執行JavaScript代碼。

<input type=”button” value=”按鈕” onclick=”showMessage()”><script>  function showMessage(){    alert(“Hello”)}</script>

       封裝元素屬性值的函數有一個局部變數event,也就是事件對象,通過event可以直接存取事件對象。函數內部的this值等於事件的目標元素。該函數可以使用with擴充範圍

function(){       with(document){       //可訪問document             with(this){             //可訪問該元素本身的屬性值             }      }}

缺點:

(1)存在時差,使用者可能在HTML元素剛顯示就觸發事件,但是當前並不一定具備執行條件,比如JS代碼沒有下載完成。可以使用try-catch拋出錯誤。

(2)擴充事件處理常式的範圍鏈在不同瀏覽器中會導致不同結果。

(3)HTML代碼與JavaScript代碼高度耦合。如果需要更換事件處理常式,需要改動兩個地方。

2.DOM0級事件處理常式    

   與HTML事件處理常式相同的是都在元素屬性上添加事件處理常式。不同的地方是DOM0級在JavaScript代碼中擷取元素引用,在引用屬性上添加事件處理常式。

<input type=”button” value=”按鈕” id="btn"><script>  var Btn = document.getElementById(“btn”);Btn.onclick = function(){   alert(“Hello”)};</script>

  程式中的this引用當前元素的範圍

  刪除DOM0級事件

Btn.onclick = null;

3.DOM2級事件處理常式

   “DOM2級事件”定義了兩個方法,用於指定和刪除事件處理常式:addEventListener()和removeEventListener()。它們都接受3個參數:事件名,事件處理常式函數和一個布爾值。最後一個布爾值是true表示在捕獲階段呼叫事件處理常式,false表示在冒泡階段呼叫事件處理常式。第三個參數可選,預設值是false。與DOM0級相同,程式中的this引用當前元素的範圍。

<input type=”button” value=”按鈕” id=”btn”><script>  var Btn = document.getElementById(“btn”);Btn.addEventListener(“click”,function(){alert(“Hello”)},false};</script>

可添加多個事件處理常式,不會被覆蓋,從上向下執行。

通過removeEventListener()移除事件處理常式,對於添加的匿名函數無法移除。

4.IE事件處理常式

   “IE事件”處理常式用於指定和刪除事件處理常式的方法有:attachEvent ()和detachEvent ()。這兩個方法接受兩個參數:事件處理常式名和事件處理常式函數名。通過attachEvent ()添加的事件預設都會添加到冒泡階段。

<input type=”button” value=”按鈕” id=”btn”><script>  var Btn = document.getElementById(“btn”);Btn.attachEvent(“onclick”,function(){alert(“Hello”)} };</script>

  與DOM0級不同的是,事件處理常式會在全域範圍中運行,即this指向window

    attachEvent ()也可以添加多個事件處理常式,但是執行順序是自下而上

 5.跨瀏覽器的事件處理常式

  核心視情況的分別處理DOM0級,DOM2級和IE事件處理常式。

Var eventHandler ={  addHandler: function(element, type, handler){  if(element.addEventListener){    element.addEventListener(type, handler, false);  }else if(element.attachEvent){    element. attachEvent (“on”+type, handler);  }else{     element[“on”+type] = handler;  },  removeHandler: function(element, type, handler){  if(element.removeEventListener){    element. removeEventListener(type, handler, false);  }else if(element.detach Event){    element. detach Event (“on”+type, handler);  }else{      element[“on”+type] = null;  } }};

  eventHandler接受3個參數,分別是要操作元素的引用、事件名和事件處理函數。

調用方法

var Btn = document.getElementById(“btn”);var handler = function(){    alert(“Hello”)};eventHandler. addHandler (Btn, “click”, handler);removeHandler. addHandler (Btn, “click”, handler);

 

javaScript之事件處理常式

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.