JavaScript學習13:事件綁定__Java

來源:互聯網
上載者:User

        事件綁定分為兩種:一種是傳統事件綁定(內聯模型、指令碼模型),一種是現代事件綁定(DOM2級模型)。現代事件綁定在傳統綁定的基礎上為我們提供了更強大更方便的功能。

        傳統事件綁定的問題

        因為內聯模型很少用,這裡不做討論。先來看一下指令碼模型,將一個函數賦值給一個事件處理函數。   

<span style="font-size:18px;">var box=document.getElementById('box');box.onclick=function(){alert('Lian');};box.onclick=function(){alert('Jiang');};</span>

        如此綁定事件有很多的問題,具體如下:

        1一個事件處理函數觸發兩次事件,後面的一個會把    前一個完全覆蓋掉

<span style="font-size:18px;">box.onclick=toBlue;function toRed(){this.className='red';this.onclick=toBlue;}function toBlue(){this.className='blue';this.onclick=toRed;}</span>

        2事件切換器,在進行擴充的時候,會出現三個問題:覆蓋,可讀性降低、this傳遞問題。

        編寫自訂事件處理函數,還有一個問題,那就是兩個相同函數名的函數誤註冊了多次,那麼應該把多餘的屏蔽掉。這樣自訂的話,就比較麻煩了。

        W3C事件處理函數

      DOM2級事件定義了兩個方法,用於添加事件和刪除事件處理常式的操作:addEventListener()和removeEventListener()。所有DOM節點中都包含這兩個方法,並且它們都接受3個參數:事件名、函數、冒泡或捕獲的布爾值(true表示捕獲,false表示冒泡)。      

<span style="font-size:18px;">window.addEventListener('load',init,false);window.addEventListener('load',init,false);function init(){alert('Lian');}</span>

        相比較我們自訂的好處有:1不需要自訂了 2 可以屏蔽掉相同的函數 3 可以設定冒泡和捕獲。

        IE事件處理函數

        IE實現了與DOM中類似的兩個方法:attachEvent和detachEvent。這兩個方法接受相同的參數:事件名和函數。

        IE中事件處理函數有很多區別,相對於W3C的DOM而言:1.IE不支援捕獲,只支援冒泡 2.IE添加事件不能屏蔽重複的函數;3.IE中的this指向的是window而不是DOM對象;4.在傳統事件上,IE是無法接受到event對象的,但是使用了attchEvent之後就可以。

        鑒於IE中事件綁定函數有諸多問題,因此在實踐中不去使用。

        事件對象的其他補充

        在W3C中提供了一個屬性:relatedTarget,這個屬性可以在mouseover和mouseout事件中擷取從哪裡移入和從哪裡移出的DOM對象。

        IE提供了兩組分別用於 移入移出的屬性:fromElement和toElement,分別對應mouseover和mouseout。       

<span style="font-size:18px;">function getTarget(evt){var e=evt||window.event;if(e.srcElement){if(e.type=='mouseover'){return e.fromElement;} else if(e.type=='mouseout'){return e.toElement;}}else if(e.relatedTarget){return e.relatedTarget;}}</span>

        小結一下:對於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.