監聽事件:
addEventListener(type,callback,useCapture);
removeEventListener(type,callback,useCapture);
添加:
var button=document.getElementById("createButton");
button.addEventListener("click",function(){/* ... */},false);
移除事件監聽:
var div=document.getElementById("div");
var listener=function(event){/* ..*/};
div.addEventListener("click",listener,false);
div.removeEventListener("click",listener,false);
1、如果事件監聽的處理函數是匿名函數,那麼只有在元素銷燬時纔會移除此事件;
2、綁定事件的第三個參數爲事件的處理方式true:捕獲,即當事件觸發時回調函數的執行順序父元素事件處理函數-->子元素事件處理函數;false時爲我們通常所用的事件冒泡。
3、當事件冒泡時可以通過event.stopPropagation()函數來終止冒泡(傳播);
4、瀏覽器同樣給事件賦予了默認行爲(checkbox選中,鏈接等),在事件傳播階段(之後)會觸發這些默認行爲。可以通過調用event.preventDefault()函數來阻止默認行爲,同樣也可以在回調函數中return false來阻止。
委託事件:
從事件冒泡開始就發生了事件委託,我們可以直接給父元素綁定事件監聽,用來檢測在其子元素內發生的事件,用來減少應用中事件監聽的數量。
//在ul列表上做事件委託
list.addEventListener("click",function(){
if(e.currentTarget.tagName==="li"){
/*do something*/
return false;
}
},false);
JQuery:
//不要這樣做,這樣會給每個li元素都添加了事件監聽(非常浪費)
$("ul li").click(function(){/*...*/})
$("ul").delegate("li","click",function(){/*...*/});
1、使用事件委託的好處是,所有爲元素動態添加的子元素都具有事件監聽。
自定義事件:
//綁定自定義事件
$(".class").bind("refresh.widget",function(){/*...*/});
//觸發自定義事件
$(".class").trigger("refresh.widget");
//From O'Reilly