1 事件:就是文檔或瀏覽器窗口中發生的一些特定的交互瞬間。
tips:js和xhtml的交互是通過當用戶或瀏覽器操作網頁時發生的事件來處理的。
1.1 事件流:即事件的順序。
事件冒泡:事件從事件發生的目標最內部開始觸發,向上觸發到最外部(document對象)。
事件捕獲:事件捕獲正好與冒泡相反。它的事件觸發順序是從最外層的對象(document對象)到最里層的對象。
DOM事件流:dom同時支持事件捕獲和事件冒泡,但事件捕獲先發生。
1.2 事件處理程序/監聽器
定義:為響應一個事件而被調用的函數稱為事件處理程序(DOM中叫事件監聽器)。
兩種指派方式:1.傳統事件處理程序指派方法。(DOM0) 2.現代事件處理程序指派方法。
1.傳統事件處理程序指派方法。(DOM0):為一個事件指派一個事件處理程序。
1)在js中指定事件處理程序。
eg:
var odiv = document.getElementById("div1");
odiv.onclick = function(){
alert("我被點擊了"); //事件處理程序的名稱必須全部小寫。
}
tips:1.事件處理程序的名稱必須全部小寫。
2.在綁定事件處理程序到事件屬性時,只能引用函數的名稱,后面不能加括號。若加括號則表示立即執行函數。
3.不管函數是如何定義的,必須確保在XHTML元素被添加到DOM之前。登記事件處理程序。即js寫到后面,保證節點已經加載定義了。
2.現代事件處理程序指派方法。:為一個事件指派多個事件處理程序。 //有兼容性問題。
1)IE瀏覽器
attachEvent()用於將一個事件處理程序綁定到一個事件。
detachEvent()用於解除事件處理程序的綁定。
[object].attachEvent(“事件處理程序的名稱”,函數)
[object].detachEvent(“事件處理程序的名稱”,函數)
2)DOM //即是DOM2
DOM中使用addEventListener()和removeEvenList() 方法完成事件處理程序指派和刪除的任務。
有三個參數 事件的名稱,要指派的函數 ,是否處理程序要用在冒泡或捕獲階段。
第三個參數為true,用在捕獲階段,是則false用在冒泡階段。
[object].addEventListener(“事件名稱”,函數名,bCapture)
[object].removeEvenList()(“事件名稱”,函數名,bCapture)
****(重要)兼容性問題的解決:
if(document.addEventListener){ //DOM
odiv.addEventListener("click",fnclick1,true);
}
else if(document.attachEvent){ //IE
odiv.attachEvent("onclick",fnclick1)
}
2 Event對象
tips:Event 對象代表事件的狀態。
比如事件在其中發生的元素、鍵盤按鍵的狀態、鼠標的位置、鼠標按鈕的狀態。
事件通常與函數結合使用,函數不會在事件發生前被執行!
2.1 定位:
1.ie中:event對象是window對象的一個屬性。
必須如下執行:
odiv.onclick = function(){
var oevent =window.event;
}
2.DOM中:event對象只能作為僅有的參數傳給事件處理程序。
必須如下執行:
odiv.onclick = function (oEvent){};
2.2 屬性和方法
1)ie中event屬性和方法:
2)dom中event屬性和方法:
3 事件類型:
1.鼠標事件:click dbclick mousedown mouseout mouseover mouseup mousemove
2.鍵盤事件:keydown keypress keyup
3.HTML事件:load unload change scroll focus blur
