美文网首页
js阻止事件冒泡、捕获和默认事件行为

js阻止事件冒泡、捕获和默认事件行为

作者: 不退则进_笑 | 来源:发表于2020-12-08 15:36 被阅读0次

    1,防止冒泡和捕获

    • w3c 的方法是 e.stopPropagation()
    • IE 是使用 e.cancelBubble = true
    <!DOCTYPE html>
    <html>
    <head>
    <meta charset="utf-8">
    <title>菜鸟教程(runoob.com)</title>
        <div id='box1' onClick=alert('box1点击事件')>
            <h2>box1盒子</h2>
            <div id='box2'>
                <h3>
                    box2盒子
                </h3>
            </div>
        </div>
    </head>
    <body>
    
    <script>
        var box2 = document.getElementById('box2')
        box2.onclick = function(e) {
            alert('box2点击事件');
            var event = e||window.event;
            event.cancelBubble ? event.cancelBubble = true : event.stopPropagation();
        }
    
    </script>
    
    </body>
    </html>
    

    2,默认事件

    1,什么是默认事件:

    • a 标签 href 属性上的跳转
    • 鼠标右键呼出菜单
    • form 表单里 button 标签和 type 属性为 submit 的 input 标签的提交

    2,取消默认事件

    • w3c 的取消默认事件方法是 e.preventDefault()
    • IE9 以下是使用 e.returnValue = false
    1)a 标签默认时间的取消
    
    document.getElementById('aaa').onclick =
    function(e){
      var event = e || window.event
      if(e.preventDefault){
        e.preventDefault()
      } else {
        event.returnValue = false
      }
    }
    
    2) 右键呼出菜单默认事件的取消
    
    document.oncontextmenu = function(e){
        var event = e || window.event;
        if(e.preventDefault){
            e.preventDefault();
        }else{
            event.returnValue = false;
        }
    }
    
    3)表单的默认事件——提交事件的取消
    
    document.getElementsByClassName(“user-info”)[0].onsubmit = function(e){
    var event = e || window.event;
      if(event.preventDefault){
        event.preventDefault();
      }else{
        event.returnValue = false;
      }
    }
    

    3,return false

    • return false 只能阻止默认行为,不阻止默认冒泡。但是 jquery 的 return false 既能阻止默认行为,也能阻止冒泡
    1)原生 JS,只阻止默认行为,不阻止冒泡
    
    <div onclick=alert('222')>
        box1
        <div onclick=alert('111')>
            box2
            <a id="aaa" href="https://www.baidu.com/">百度</a>
        </div>
    </div>
    
    <script>
        document.getElementById('aaa').onclick = function(){
            return false
        }
    </script>
    
    2)jQ,既阻止默认行为,也阻止冒泡
    
    <div onclick=alert('222')>
        box1
        <div onclick=alert('111')>
            box2
            <a id="aaa" href="https://www.baidu.com/">百度</a>
        </div>
    </div>
    
    <script src="https://code.jquery.com/jquery-3.1.1.min.js"></script>
    <script>
        $("#aaa").on('click',function(){
        return false;
    });
    </script>
    

    在使用 return false 过程中发现,如果使用

    // return false起了阻止默认事件行为
    
    <script>
        document.getElementById('aaa').onclick = function(){
            return false
        }
    </script>
    
    // return false没有起作用
    
    document.getElementById('aaa').addEventListener('click', function () {
        return false
    })
    
    

    相关文章

      网友评论

          本文标题:js阻止事件冒泡、捕获和默认事件行为

          本文链接:https://www.haomeiwen.com/subject/ejefgktx.html