js阻止默认行为和阻止事件冒泡
一.阻止浏览器的默认行为
preventDefault方法的起什么作用呢?我们知道比如<a href="
http://www.baidu.com/
">百度</a>,这是html中最基础的东西,起的作用就是点击百度链接到
http://www.baidu.com/
,这是属于<a>标签的默认行为,而preventDefault方法就是可以阻止它的默认行为的发生而发生其他的事情。
<a href="http://www.baidu.com/" id="tes" οnclick="testzuzhi(event);">百度</a>
function testzuzhi(event){
if (event && event.preventDefault ) {
event.preventDefault();
}else{
window.event.returnValue = false;
}
}
此时点击百度链接,不会跳到
http://www.baidu.com/
二.阻止事件冒泡
<div id='div' οnclick='alert("hello div");'>
<ul οnclick='alert("hello ul");'>
<li οnclick='alert("hello li");'>hello world</li>
</ul>
</div>
当单击hello world时,会依次触发alert(“hello li”),alert(“hello ul”),alert(“hello div”),这就是事件冒泡。
当需要 阻止冒泡时,就得使用stopPropagation
<div id='div' οnclick='alert("hello div");' >
<ul οnclick='alert("hello ul");'>
<li id='ul-a' οnclick='zuzhimaopao(event);'>hello world</li>
</ul>
</div>
function stopP(e)
{
var evt = e || window.event;
//IE用cancelBubble=true来阻止而FF下需要用stopPropagation方法
evt.stopPropagation ? evt.stopPropagation() : (evt.cancelBubble=true);
}
function zuzhimaopao(event){
alert("hello li");
stopP(event);
}
此时点击hello world,只会弹出"hello li"的alert
三.return false
在jQuery中使用return false时,相当于同时使用event.preventDefault和event.stopPropagation,它会阻止冒泡也会阻止默认行为。但是使用原生js写时,return false只会阻止默认行为。
<div id='div' οnclick='alert("hello div");'>
<ul οnclick='alert("hello ul");'>
<li id='ul-a' οnclick='alert("hello li");'><a href="http://www.baidu.com" id="testfalse">百度</a></li>
</ul>
</div>
$("#testfalse").on('click',function(){
return false;
});
此时点击百度不会跳转到"http://www.baidu.com",只弹出hello li的alert