首页 > 代码库 > 认识事件冒泡

认识事件冒泡

一.事件冒泡就是多个元素同时响应了同一个事件,前提是这些元素都绑定了这一个事件。这只是我的定义,感觉好理解些。

称它为冒泡,是因为事件会按照DOM元素的层次结构依次执行,就像水泡一样不断浮向顶端。所以称之为事件冒泡。

这个图便于理解,我用箭头来代替冒泡:

二.通过demo来认识

@{
    Layout = null;
}

<!DOCTYPE html>

<html>
<head>
    <meta name="viewport" content="width=device-width" />
    <script type="text/javascript" src="http://www.mamicode.com/Scripts/jquery-1.7.1.min.js"></script>
    <script type="text/javascript">
        $(function () {
            $("span").bind("click", function () {
                var text = $("#msg").html() + "<p>span元素单击事件</p>";
                $("#msg").html(text);
            });
        });
        $(function () {
            $("#content").bind("click", function () {
                var text = $("#msg").html() + "<p>div元素单击事件</p>";
                $("#msg").html(text);
            });
        });
        $(function () {
            $("body").bind("click", function () {
                var text = $("#msg").html() + "<p>body元素单击事件</p>";
                $("#msg").html(text);
            });
        });
    </script>
    <title>BubbleEvent</title>
</head>
<body >
    <div id="content">
        DIV元素
        <span>SPAN元素</span>
    </div>
    <div id="msg"></div>
</body>
</html>

依次点击span,div,body会出现效果图:(body的点击事件只作用于当前内容所占区域,而不是整个网页区域

三.解决事件冒泡

先认识下事件对象,在上面程式中添加一个参数event,点击span元素时,事件对象就会被创建,这个事件对象只有事件函数才能访问,事件函数处理完后

事件对象会销毁。

事件对象具有自己的属性

jquery中stopPropagation()方法可以停止事件冒泡

  $(function () {
            $("span").bind("click", function (event) {
                var text = $("#msg").html() + "<p>span元素单击事件</p>";
                $("#msg").html(text);
                alert(event.type);//event类型是click
                event.stopImmediatePropagation(); //停止事件冒泡方法
            });
        });

此时点击span元素效果: