事件從根節點開始,逐級派送到子節點,若節點繫結了事件動作,則執行動作,然後繼續走,這個階段稱為「捕獲階段(capture)」;
執行完捕獲階段後,事件由子節點往根節點派送,若節點繫結了事件動作,則執行動作,然後繼續走,這個階段稱為「冒泡階段(bubble)」
由於這兩派瀏覽器的差異,其繫結的方法也不一樣,其中
1、遵循標準的瀏覽器使用w3c定義的addeventlistener函式繫結,函式定義如下:
function addeventlistener(string eventflag, function eventfunc, [bool usecapture=false])
eventflag : 事件名稱,如click、mouseover…
eventfunc: 繫結到事件中執行的動作
usecapture: 指定是否繫結在捕獲階段,true為是,false為否,預設為true
在事件監聽流中可以使用event.stoppropagation()來阻止事件繼續往下流
2、ie中使用自有的attachevent函式繫結時間,函式定義如下:
function attachevent(string eventflag, function eventfunc)
eventflag: 事件名稱,但要加上on,如onclick、onmouseover…
eventfunc: 繫結到事件中執行的動作
在事件監聽流中可以使用window.event.cacenlbubble=true來阻止事件繼續往下流
總結:addeventlistener(string eventflag, function eventfunc, [bool usecapture=false]),針對ff,chrome,safari瀏覽器,false指冒泡階段,預設為true,指捕獲階段。不過一般我們 都用false。
attachevent(string eventflag, function eventfunc),針對ie系列、還有opera瀏覽器,少了事件處理機制的引數,只指定事件型別(別忘了on)和觸發哪個函式。
有了這些認知之後,有了大致的思路,對應的**:
if(document.addeventlistener)
else
});方法2:
$('.show').bind('click',function());//注意:這種方法會阻止後面的所有瀏覽器的預設動作,如a標籤會阻止跳轉動作。
最後是乙個阻止冒泡的函式,視情況使用:
var stopevent = function(event)else
};
js 冒泡事件的處理
onmouseover 和 onmouseout事件冒泡 當事件在某一dom元素被觸發時,例如使用者在某個節點上點選滑鼠,事件將跟隨著該節點繼承的各個父節點冒泡穿過整個dom的節點層次,直到它遇到依附有該事件型別處理的父節點,html是層次結構內層的事件能夠被傳播到外層,我們稱之為事件冒泡。this...
js事件冒泡及阻止
當乙個元素接收到事件的時候,會把他接收到的事件傳給自己的父級,一直到window,當然其傳播的是事件,繫結的執行函式並不會傳播,如果父級沒有繫結事件函式,就算傳遞了事件,也不會有什麼表現,但事件確實傳遞了。事件冒泡的原因是事件源本身可能沒有處理事件的能力,即處理事件的函式並未繫結在該事件源上。它本身...
js事件冒泡
什麼是js事件冒泡?在乙個物件上觸發某類事件 比如單擊onclick事件 如果此物件定義了此事件的處理程式,那麼此事件就會呼叫這個處理程式,如果沒有定義此事件處理程式或者事件返回true,那麼這個事件會向這個物件的父級物件傳播,從裡到外,直至它被處理 父級物件所有同類事件都將被啟用 或者它到達了物件...