事實上stoppropagation和cancelBubble的作用是一樣的胧后,都是用來阻止瀏覽器默認的事件冒泡行為芋浮。
不同之處在于stoppropagation屬于W3C標準,試用于Firefox等瀏覽器壳快,但是不支持IE瀏覽器纸巷。相反cancelBubble不符合W3C標準,而且只支持IE瀏覽器眶痰。所以很多時候瘤旨,我們都要結合起來用。不過凛驮,cancelBubble在新版本chrome,opera瀏覽器中已經(jīng)支持裆站。
語法:e.stopPropagation();
參數(shù)e:表示事件傳遞的參數(shù),代表事件的狀態(tài)黔夭。
[html] view plain copy
<html>
<head>
<title>冒泡測試</title>
</head>
<body onclick="alert('body');">
<div onclick="clickBtn(event)" style="width:100px;height:100px; background:#666;">
<input id="Button1" type="button" value="button" onclick="alert('btn');" />
</div>
<script language="javascript" type="text/javascript">
function clickBtn(event)
{
event=event?event:window.event;
event.stopPropagation();
alert("OK");
}
</script>
</body>
</html>
阻止事件冒泡stopPropagation的兼容寫法
function stopPropagation(e){
e=window.event||e;
if(document.all){ //只有ie識別
e.cancelBubble=true;
}else{
e.stopPropagation();
}
}
cancelBubble 檢測是否接受上層元素的事件的控制宏胯。
語法: event.cancelBubble[ = cancelBubble]
可能的值: 這是一個可讀寫的布爾值:
true 不被上層元素的事件控制。
false 允許被上層元素的事件控制本姥。這是默認值肩袍。
事件捕獲其實有三種方式,事件冒泡只是其中的一種:
(1)IE從里到外(inside→outside)的冒泡型事件婚惫。
(2)Netscape4.0從外到里(outside→inside)的捕獲型事件氛赐。
(3)DOM事件流魂爪,先從外到里,再從里到外回到原點(outside→inside→outside)的事件捕獲方法艰管。
不是所有的事件都能冒泡滓侍。以下事件不冒泡:blur、focus牲芋、load撩笆、unload。
事件捕獲方式在不同瀏覽器缸浦,甚至同種瀏覽器的不同版本中是有所區(qū)別的夕冲。如Netscape4.0采用捕獲型事件解決方案,其它多數(shù)瀏覽器則支持冒泡型事件解決方案裂逐,另外DOM事件流還支持文本節(jié)點事件冒泡歹鱼。
事件捕獲到達頂層的目標在不同瀏覽器或不同瀏覽器版本也是有區(qū)別的。在IE6中HTML是接收事件冒泡的卜高,另外大部分瀏覽器將冒泡延續(xù)到window對象弥姻,即……body→documen→window。
阻止冒泡并不能阻止對象默認行為篙悯。比如submit按鈕被點擊后會提交表單數(shù)據(jù)蚁阳,這種行為無須我們寫程序定制。