關於事件和事件源一系列的相容問題;
每個元素身上的事件都是天生自帶的,只需要我們給這個事件繫結一個方法(不需要去定義它),當事件觸發時就會執行這個方法
1、時間繫結的兩種寫法
(1)div.onclick=function(){}
(2)div.addEventListener()或div.attachEvent()
(1)與(2)這兩者的區別
onclick是這個元素的私有屬性,天生自帶的,而addEventListener()是公有屬性,從EventTarget(事件源)物件上繼承來的;IE低版本的attach是公有de。
div.onclick存在事件冒泡,不存在捕獲;
div.addEventListener()有冒泡也有捕獲
div.attachEvent()只有事件冒泡。
2、div.addEventListener()和div.attachEvent()的區別
(1)attachEvent()只用在IE8以下,addEventListener()適合標準瀏覽器
(2)attachEvent()的事件名帶on,addEventListener()的事件名不帶on
(3)attachEvent()函式裡面的this是undefined,addEventListener()的函式裡面的this是當前元素物件
(4)attachEvent()只有冒泡沒有捕獲,addEventListener()有冒泡也有捕獲
3、arguments
每個函式都有一個arguments物件,它是這個函式所有的引數構成的集合;在某個事件繫結的方法中,console.log(arguments)陣列中有一個元素叫MouseEvent,每個事件的方法中瀏覽器都給他一個引數叫做MouseEvent,滑鼠中的所有資訊都臨時存在這個mouseEvent物件上
4、mouseEvent的相容性
var e=e||window.event;
5、Event物件的相容性
clientX和clientY是滑鼠到網頁左上角的距離座標,但IE低版本沒有這個屬性,
IE如何計算pageY的值:clientY+scrollTop
6、獲取事件源,點選哪個元素,哪個元素就是事件源
標準:e.target
非標準:e.srcElement
7、阻止事件冒泡的相容性
標準和非標準都相容:event.cancelBubble=true
標準:event.stopPropaggation()
相容上面兩種:event.stopPropaggation?event.stopPropaggation():event.cancelBubble=true
8、阻止事件預設行為的相容性
例如:a
a.href="javascript:;"取消重新整理
標準和非標準都相容取消重新整理:event.preventDefault?event.preventDefault():event.returnValue=false