- 冒泡型事件(從小到大)
<div id='div' onclick='alert("div");'>
<ul onclick='alert("ul");'>
<li onclick='alert("li");'>test</li>
</ul>
</div>
//單擊test時(shí),會(huì)依次觸發(fā)alert(“l(fā)i”),alert(“ul”),alert(“div”)忠售,這就是事件冒泡铆隘。
- 抓捕型事件(從大到械缳鳌)
阻止冒泡
w3c的方法是e.stopPropagation(),IE則是使用e.cancelBubble = true
window.event? window.event.cancelBubble = true : e.stopPropagation();
取消默認(rèn)事件
w3c的方法是e.preventDefault()但绕,IE則是使用e.returnValue = false
<body>
<a id='aa' >盡管點(diǎn)擊跛梗,我也不會(huì)跳轉(zhuǎn)</a>
<script>
var a = document.getElementById('aa');
console.log('a',a)
a.onclick = function(e) {
if(e.preventDefault){
e.preventDefault();
}else{
window.event.returnValue == false
}
}
</script>
</body>
return false
javascript的return false只會(huì)阻止默認(rèn)行為寻馏,而是用jQuery的話則既阻止默認(rèn)行為又防止對(duì)象冒泡。·
原生js用return false
<div id='div' onclick='alert("div");'>
<ul onclick='alert("ul");'>
<li id='ul-a' onclick='alert("li");'><a >caibaojian.com</a></li>
</ul>
</div>
var a = document.getElementById("testB");
a.onclick = function(){
return false;
};
如上核偿,只取消默認(rèn)事件诚欠,但不取消冒泡事件。
jQuery使用return false
<div id='div' onclick='alert("div");'>
<ul onclick='alert("ul");'>
<li id='ul-a' onclick='alert("li");'><a >caibaojian.com</a></li>
</ul>
</div>
$("#testC").on('click',function(){
return false;
});
如上漾岳,即取消默認(rèn)事件轰绵,又取消冒泡事件
總結(jié)使用方法
當(dāng)需要停止冒泡行為時(shí),可以使用
function stopBubble(e) {
//如果提供了事件對(duì)象尼荆,則這是一個(gè)非IE瀏覽器
if ( e && e.stopPropagation )
//因此它支持W3C的stopPropagation()方法
e.stopPropagation();
else
//否則左腔,我們需要使用IE的方式來(lái)取消事件冒泡
window.event.cancelBubble = true;
}
當(dāng)需要阻止默認(rèn)行為時(shí),可以使用
//阻止瀏覽器的默認(rèn)行為
function stopDefault( e ) {
//阻止默認(rèn)瀏覽器動(dòng)作(W3C)
if ( e && e.preventDefault )
e.preventDefault();
//IE中阻止函數(shù)器默認(rèn)動(dòng)作的方式
else
window.event.returnValue = false;
return false;
}
來(lái)源:前端開(kāi)發(fā)博客