理解阻止浏览器默认事件和事件冒泡cancelBubble

一、阻止浏览器默认事件

1、先举个例子说什么是  浏览器的默认事件 :

比如有一个输入框,当我按下字母a,就会在输入框显示字母a。就是浏览器本该发生的事情。小孩子一出生就会汲取母乳一样的道理,这些都是先天,默认好的了。

2、看个demo,阻止浏览器默认的右键弹出菜单,而且弹出自己自定义的菜单。代码如下:

<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8">
        <style type="text/css">
        #div1
        {
            width:100px;
            height: 100px;
            list-style: none;
            background: #ccc;
            display: none;

            position: absolute;
        }
        </style>
        <script type="text/javascript">
        /*在鼠标按下位置弹出菜单*/
        window.oncontextmenu = function(evt)
        {
            var oDiv = document.getElementById(‘div1‘);

            var oEvt = evt || event;

            oDiv.style.display = ‘block‘;
            oDiv.style.left = oEvt.clientX +‘px‘;
            oDiv.style.top = oEvt.clientY +‘px‘;

            return false;                   //阻止浏览器默认事件

            document.onclick=function ()                      //当再点击时,设置div1为none
            {
                var oDiv=document.getElementById(‘div1‘);
                oDiv.style.display=‘none‘;
            };
        }
        </script>
    </head>
    <body>
        <div id="div1">
            <ul>
                <li>菜单一</li>
                <li>菜单一</li>
                <li>菜单一</li>
                <li>菜单一</li>
            </ul>
        </div>
    </body>
</html>

return false,阻止了浏览器默认事件,所以当右击鼠标右键时,不会弹出默认菜单, 而是弹出了我自定义的菜单,一个ul列表。

兼容:IE8+,chrome、FF

二、阻止事件冒泡cancelBubble=true

1、举个例子说明什么是事件冒泡

<div id=‘div‘ onclick=‘alert("div");‘>
<ul onclick=‘alert("ul");‘>
<li onclick=‘alert("li");‘>test</li>
</ul>
</div>

当我点击test的时候,先会弹出 li ->ul ->div。从下往上冒泡。就比如小鱼儿在海底冒泡,小泡泡从海底往海面冒泡,越来越大。html文档中最后的一个泡是document。

2、下面有个demo,我们经常用到的一个效果,显示/隐藏。当我一点击,div显示,在页面其他位置点击,div消失。以后是代码:

 <!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">
    <title>仿select-事件冒泡</title>
    <style>
    #div1
    {
        width:200px;
        height:200px;
        background:#CCC;
        display:none;
    }

    </style>
    <script>
    window.onload = function()
    {
        var oBtn = document.getElementById(‘btn1‘);
        var oDiv = document.getElementById(‘div1‘);

        /*当点击按钮,div显示,,点击其他地方div隐藏*/
        oBtn.onclick = function(evt)
        {
            var oEvent = evt || event;                            //evt 兼容FF/chrome浏览器
            div1.style.display = ‘block‘;

         oEvent.cancelBubble = true;           //取消事件冒泡(否则点击按钮后,会冒泡到最后一层上即document)
        }
        document.onclick = function()
        {
            div1.style.display = ‘none‘;

            alert(‘document被点击‘);
        }

    }
    </script>
    </head>
<body>
<input type="button" value="点击我" id="btn1">
<div id="div1"></div>
</body>
</html>

在需要取消冒泡的地方:加一句oEvent.cancelBubble = true

兼容:IE6,FF,chrome等

三、学习js不仅要知道怎么样,还有要处理浏览器兼容,我晕了,第一个例子没能兼容IE6,再搜搜。学习果然是一场修行

时间: 2024-10-13 23:54:34

理解阻止浏览器默认事件和事件冒泡cancelBubble的相关文章

五,事件对象、阻止浏览器默认动作、阻止事件冒泡

在jquery里边: $().bind(‘click’,function(evt){ evt.preventDefault(); evt.stopPropagation(); }); preventDefault()方法是jquery的方法,名字与js底层代码的名字一致而已. 并且其有做浏览器兼容处理(阻止浏览器默认行为) stopPropagation()方法是jquery的方法,名字与js底层代码的名字一致. 其有做浏览器兼容处理(阻止事件冒泡) 解析: $().bind(‘click’,f

JS 阻止浏览器默认行为和冒泡事件

JS 冒泡事件 首先讲解一下js中preventDefault和stopPropagation两个方法的区别: preventDefault方法的起什么作用呢?我们知道比如<a href="http://www.baidu.com">百度</a>,这是html中最基础的东西,起的作用就是点击百度链接到http://www.baidu.com,这是属于<a>标签的默认行为,而preventDefault方法就是可以阻止它的默认行为的发生而发生其他的事情

JQuery 阻止js事件冒泡 阻止浏览器默认操作

//阻止事件冒泡 event.stopPropagation(); //阻止浏览器默认操作 event.preventDefault(); 代码不一定能执行,写给自己看的. 事件冒泡: 1 <a href="javascript:alert('啦啦啦');"> 2 <ul onclick="alert('德玛西亚');"> 3 <li onclick="alert('大盖伦');"></li> 4

js添加事件、移除事件、阻止冒泡、阻止浏览器默认行为等写法(兼容IE/FF/CHROME)

网上有关这方面的代码比较多而乱,这里整理一下并加以改进. 添加事件 var addEvent = function( obj, type, fn ) { if (obj.addEventListener) obj.addEventListener( type, fn, false ); else if (obj.attachEvent) { obj["e"+type+fn] = fn; obj.attachEvent( "on"+type, function() {

阻止浏览器默认的事件冒泡行为

事实上stoppropagation和cancelBubble的作用是一样的,都是用来阻止浏览器默认的事件冒泡行为. 不同之处在于stoppropagation属于W3C标准,试用于Firefox等浏览器,但是不支持IE浏览器.相反cancelBubble不符合W3C标准,而且只支持IE浏览器.所以很多时候,我们都要结合起来用.不过,cancelBubble在新版本chrome,opera浏览器中已经支持. 语法:e.stopPropagation(); 参数e:表示事件传递的参数,代表事件的状

js停止冒泡和阻止浏览器默认行为

停止冒泡通用方法: function stopBubble(e) { //如果提供了事件对象,是非IE浏览器 if ( e && e.stopPropagation ) //使用W3C的stopPropagation()方法 e.stopPropagation(); else //使用IE的cancelBubble = true来取消事件冒泡 window.event.cancelBubble = true; } 阻止浏览器默认行为-通用方法 //阻止浏览器的默认行为 function s

js阻止浏览器默认事件

1.阻止浏览器的默认行为 function stopDefault(e) { //如果提供了事件对象,则这是一个非IE浏览器 if(e && e.preventDefault) { //阻止默认浏览器动作(W3C) e.preventDefault(); } else { //IE中阻止函数器默认动作的方式 window.event.returnValue = false; } return false; } 2.停止事件冒泡 function stopBubble(e) { //如果提供

移动端和pc端事件绑定方式以及取消浏览器默认样式和取消冒泡

### 两种绑定方式 (DOM0)1.obj.onclick = fn; (DOM2)2. ie:obj.attachEvent(事件名称,事件函数); 1.没有捕获(非标准的ie 标准的ie底下有 ie6到10) 2.事件名称有on 3.事件函数执行的顺序:标准ie->正序 非标准ie->倒序 4.this指向window 标准:obj.addEventListener(事件名称,事件函数,是否捕获); 1.有捕获 2.事件名称没有on 3.事件执行的顺序是正序 4.this触发该事件的对象

JavaScript停止冒泡和阻止浏览器默认行为

事件兼容 function myfn(e){ var evt = e ? e:window.event; } js停止冒泡 function myfn(e){ window.event? window.event.cancelBubble = true : e.stopPropagation(); } js阻止默认行为 function myfn(e){ window.event? window.event.returnValue = false : e.preventDefault(); }