Javascript 什么';取消泡泡和停止泡泡的区别是什么?

Javascript 什么';取消泡泡和停止泡泡的区别是什么?,javascript,dom-events,Javascript,Dom Events,有谁能告诉我Javascript中使用的cancelBubble和stopPropagation方法的用法有什么不同。cancelBubble是一个IE特有的布尔属性(而不是方法),与其他浏览器的stopPropagation()方法的用途相同,这是为了防止事件移动到下一个目标(当事件从内部元素移动到外部元素时称为“冒泡”,这是事件在IE

有谁能告诉我Javascript中使用的
cancelBubble
stopPropagation
方法的用法有什么不同。

cancelBubble
是一个IE特有的布尔属性(而不是方法),与其他浏览器的
stopPropagation()
方法的用途相同,这是为了防止事件移动到下一个目标(当事件从内部元素移动到外部元素时称为“冒泡”,这是事件在IE<9中移动的唯一方式)。IE 9现在支持
stopPropagation()
因此
cancelBubble
最终将过时。同时,以下是用于停止事件传播的跨浏览器功能:

function stopPropagation(evt) {
    if (typeof evt.stopPropagation == "function") {
        evt.stopPropagation();
    } else {
        evt.cancelBubble = true;
    }
}
在事件处理程序函数中,可以按如下方式使用它:

document.getElementById("foo").onclick = function(evt) {
    evt = evt || window.event; // For IE
    stopPropagation(evt);
};

为了与IE8及更早版本兼容,如果未定义
.stopPropogation()
,请使用
.cancelBubble

if(ev.stopPropagation)ev.stopPropagation();
else ev.cancelBubble=true; // where ev is an event object

在MSDN中阅读:

任何人都描述过的另一个区别是
e.cancelBubble
仅在冒泡阶段(当事件到达第一个冒泡元素时)停止进一步元素的事件传播,而
.preventDefault()
在捕获和冒泡阶段都阻止传播(立即用于传播中的下一个元素)

var a=document.getElementById('a');
var b=document.getElementById('b');
var c=document.getElementById('c');
var d=document.getElementById('d');
a、 addEventListener('click',cancel,true);
b、 addEventListener('click',cancel,true);
c、 addEventListener('click',cancel,false);
d、 addEventListener('click',cancel,false);
功能取消(事件){
var logElem=event.currentTarget.id;
控制台日志(logElem);
如果(logElem=='a')event.cancelBubble=true;
}
var e=document.getElementById('e');
var f=document.getElementById('f');
var g=document.getElementById('g');
var h=document.getElementById('h');
e、 addEventListener('click',stop,true);
f、 addEventListener('click',stop,true);
g、 addEventListener('click',stop,false);
h、 addEventListener('click',stop,false);
功能停止(事件){
var logElem=event.currentTarget.id;
控制台日志(logElem);
if(logElem=='e')event.stopPropagation();
}
#a,#b,#c,#d,#e,#f,#g,#h{
框大小:边框框;
宽度:100%;
身高:90%;
边框:实心1px#33aaff;
填充:10px;
填充顶部:0px;
光标:指针;
}
#a、 #e{
宽度:200px;
高度:200px;
}
cancelBubble
俘虏
b捕获
冒泡
d起泡
停止传播
电子捕获
捕捉
冒泡
气泡

它们是一样的,除了
cancelBubble
是IE唯一的延迟,而
stopPropagation
是标准的。也许是一件小事,但是如果你要将
stopPropagation
作为一个函数调用,那么将它作为
=“function”
而不是
!=“undefined”进行特性测试不是更好
?@component\u 15939:问题是某些浏览器中主机对象的某些方法(大部分是旧版本的IE)不会从
类型的
返回
“function”
。但是,对于事件对象,您是对的,可以安全地假设
stopPropagation
,如果它存在,将返回
“function”