2014-02-26_javascript_event

監聽事件:

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

 

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章