码迷,mamicode.com
首页 > Web开发 > 详细

原生js中stopPropagation,preventDefault,return false的区别

时间:2014-11-03 16:20:27      阅读:192      评论:0      收藏:0      [点我收藏+]

标签:style   blog   http   io   color   ar   使用   sp   strong   

1、stopPropagation:阻止事件的冒泡,但不阻止事件的默认行为。

最好莫过于用例子说明:

<div id=‘div‘  onclick=‘alert("div");‘>
    <ul  onclick=‘alert("ul");‘>
        <li id=‘ul-a‘ onclick=‘alert("li");‘><href="http://www.baidu.com" id="link">baidu.com</a></li>
    </ul>
</div>

var a = document.getElementById("link");
    a.addEventListener("click",function(event){
        event.stopPropagation();
    },false);
在FF上执行,不会弹出li,ul,div的弹出框,而是直接跳转。在上面定义的事件中,侦听的是事件冒泡阶段(第三个参数为false,若为true则是捕获阶段)。IE不支持事件流,在IE中定义事件处理程序需要使用attachEvent:

a.attachEvent("onclick",function(event){event.cancelBubble true;});

2、preventDefault:阻止事件的默认行为,但不阻止冒泡。

在FF,chrome,Safari,opera有效:

 

a.addEventListener("click",function(event){
        event.preventDefault();
    },false);

在IE有效:

a.attachEvent("onclick",function(event){event.returnValue = false;});

浏览器执行,会弹出li,ul,div的弹出框,但不会跳转。

3、return false:看到网上说return false会阻止事件的冒泡,但是应该要看定义事件使用的是什么方式


若使用a.onclick或a.attachEvent,则 return false会阻止默认行为;

若使用a.addEventListener,则return false 会阻止默认行为;

 

因此,使用原生js时,若要阻止默认行为,最好还是用event.preventDefault(针对非IE)或event.returnValue=false(针对IE)来设定。

若使用的是jquery,return false 即会阻止默认行为,也会阻止事件的冒泡。在jquery中,一般使用return false.


 

原生js中stopPropagation,preventDefault,return false的区别

标签:style   blog   http   io   color   ar   使用   sp   strong   

原文地址:http://www.cnblogs.com/wmmang-blog/p/4071359.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!