Javascript 为什么e.stopPropagation()不起作用?
我正在读Aaron Gustafson写的一本名为《自适应网页设计》的书,如果我有一段我不懂的javascript代码的话。在研究过程中,我发现了返回false和e.default之间的区别。我现在也了解了一点JavaScript的冒泡效果,并了解到要停止冒泡,可以使用e.stopPropagation()(至少在none ie浏览器中) 我在摆弄小提琴,但我无法使它工作。我认为这可能与冒泡的作用方式有关(从根到元素再到根?) 这是小提琴:(固定链接) 编辑: 我复制粘贴了错误的链接!现在修好了Javascript 为什么e.stopPropagation()不起作用?,javascript,event-bubbling,stoppropagation,Javascript,Event Bubbling,Stoppropagation,我正在读Aaron Gustafson写的一本名为《自适应网页设计》的书,如果我有一段我不懂的javascript代码的话。在研究过程中,我发现了返回false和e.default之间的区别。我现在也了解了一点JavaScript的冒泡效果,并了解到要停止冒泡,可以使用e.stopPropagation()(至少在none ie浏览器中) 我在摆弄小提琴,但我无法使它工作。我认为这可能与冒泡的作用方式有关(从根到元素再到根?) 这是小提琴:(固定链接) 编辑: 我复制粘贴了错误的链接!现在修好了
所以我想看到的是,当您单击锚定时,在div上使用的onclick不会被执行(这不是一个实际案例,只是一个研究案例!)事件从单击的元素一直到文档对象 div上的任何事件处理程序都将在主体上的事件处理程序之前触发(因为主体是它在DOM中的祖先)
当事件到达身体时,阻止它作用于div已经太晚了。好的,我发现我的第一把小提琴是错的。我找到了另一个可行的示例,并展示了stopPropagation()的工作原理:
var divs=document.getElementsByTagName('div');
对于(var i=0;i,如果您希望取消HTML中从子级到父级冒泡的事件,请使用下面的代码
event.cancelBubble = true;
通过使用这种方式,您可以停止从子元素到父元素的事件进一步向上冒泡。您链接到的代码与问题中的代码不相似。它们都不包含div。那么这是否意味着如果不触发div的onclick,就无法单击链接?如果是这样,那么我不知道为什么以及何时停止冒泡()函数。将事件处理程序附加到链接-确定。但将事件处理程序附加到正文。
var divs = document.getElementsByTagName('div');
for(var i=0; i<divs.length; i++) {
divs[i].onclick = function( e ) {
e = e || window.event;
var target = e.target || e.srcElement;
//e.stopPropagation ? e.stopPropagation() : ( e.cancelBubble = true );
if ('bubbles' in e) { // all browsers except IE before version 9
if (e.bubbles) {
e.stopPropagation();
alert("The propagation of the event is stopped.");
} else {
alert("The event cannot propagate up the DOM hierarchy.");
}
} else { // Internet Explorer before version 9
// always cancel bubbling
e.cancelBubble = true;
alert("The propagation of the event is stopped.");
}
this.style.backgroundColor = 'yellow';
alert("target = " + target.className + ", this=" + this.className );
this.style.backgroundColor = '';
}
}
event.cancelBubble = true;