JavaScript阻止事件冒泡

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title></title>
    <style>
        #dv1 {
            width: 300px;
            height: 300px;
            background-color: red;
        }
        #dv2 {
            width: 200px;
            height: 200px;
            background-color: yellow;
        }
        #dv3 {
            width: 100px;
            height: 100px;
            background-color: blue;
        }
    </style>
</head>
<body>
<div id="dv1">
    <div id="dv2">
        <div id="dv3"></div>
    </div>
</div>
<script src="common.js"></script>
<script>
    //事件冒泡:多个标签嵌套,有层次关系,绑定相同的事件,当里面的事件触发,外面的事件自动触发
    //如何阻止事件冒泡:
    //第一种:window.event.cancelBubble = true;IE特有的,谷歌支持,火狐不支持
    //第二种:事件处理参数对象.stopPropagation();谷歌,火狐支持,IE8不支持
    my$("dv1").onclick = function () {
        console.log(this.id);
    };
    my$("dv2").onclick = function () {
        console.log(this.id);
    };
    //事件处理参数对象
    my$("dv3").onclick = function (e) {
        console.log(this.id);
//        window.event.cancelBubble = true;
        e.stopPropagation();
    };
</script>
</body>
</html>

 

commo.js代码:

/**
 * Created by Administrator on 2018/7/22.
 */
function my$(id) {
    return document.getElementById(id);
}
//设置任意的标签中间的文本内容
function setInnerText(element, text) {
    //判断浏览器是否支持该属性
    if (typeof element.textContent == "undefined") {
        element.innerText = text;
    } else {
        element.textContent = text;
    }
}
//获取任意标签中间的文本内容
function getInnerText(element) {
    if (typeof element.textContent == "undefined") {
        return element.innerText;
    } else {
        return element.textContent;
    }
}
//获取任意一个父级元素的第一个子级元素
function getFirstElementChild(element) {
    if (element.firstElementChild) {//true 支持
        return element.firstElementChild;
    } else {
        var node = element.firstChild;//第一个子节点
        while (node && node.nodeType != 1) {
            node = node.nextSibling;
        }
        return node;
    }
}

//获取任意一个父级元素的最后一个子级元素
function getLastElementChild(element) {
    if (element.lastElementChild) {
        return element.lastElementChild;
    } else {
        var node = element.lastChild;
        while (node && node.nodeType != 1) {
            node = node.previousSibling;
        }
        return node;
    }
}

//为任意元素绑定任意事件
//参数1:任意元素
//参数2:事件类型
//参数3:事件处理函数
function addEventListner (element, type, fn) {
    //判断浏览器是否支持该方法
    if(element.addEventListener) {
        element.addEventListener(type,fn, false);
    }else if(element.attachEvent) {
        element.attachEvent("on" + type, fn);
    }else {
        element["on"+type] = fn;
    }
}

 

posted @ 2018-07-29 23:06  {颜逸}  阅读(219)  评论(0编辑  收藏  举报