Can not step twice into the same river

04月 11

关于js冒泡的一些玩意儿

什么是冒泡:
以点击事件为例,就是点击一个子元素,同时也把这个元素的父元素的点击事件触发了。
Linke this:

<div id="outer">
    <div id="inter"></div>
</div>
//JS:
$("#outer").click(function(){
    alert("outer");
})
$("#inter").click(function(){
    alert("inter");
})

上面的代码中,点击"#inter",会先弹出"inter",紧接着会弹出"outer".
为什么我点击子元素“#inter”的事件却会触发父元素的事件?
这就是冒泡了,点击子元素,同时会触发父元素的事件。

是不是理解起来 So Easy 啦 ^.^

如何阻止冒泡:
要阻止冒泡,就要用到event.stopPropagation()方法:

//HTML:
<div id="outer">
    <div id="inter"></div>
</div>
//JS:
$("#outer").click(function(){
    alert("outer");
})
$("#inter").click(function(event){
    event.stopPropagation()
    alert("inter");
})

在点击子元素的事件上添加event.stopPropagation()方法,就能阻止向父元素冒泡。

================= 万恶的分割线 ===================

当然以上是正常情况,作为一个苦逼的前端开发,都知道有个特例的,那就是万恶的IE;
那么IE怎么处理呢。。。。

function show1(e){
        var ev = e || window.event;
        if (ev.stopPropagation) {
            ev.stopPropagation();
        }
        else if (window.event) {//IE
            window.event.cancelBubble = true;//IE
        }
}

window.event是IE中的属性,如果是IE,就执行window.event.cancelBubble = true;来阻止冒泡。

标签:none

最新文章

最近回复

  • 13级叶隐:拜大神~
  • 忘记是痛
  • 向往快意人生:谢谢!
  • 忘记是痛:http://bloghost.cn/us/
  • 向往快意人生:你好chen先生,不知您用的是哪款美国主机,访问速度飞快,价格一...
  • 忘记是痛:缘分啊,我的域名也是我的名字
  • 陈朝均:你好,你的域名是我的名字 ,而且我也对网页很感兴趣。我的站:d...
  • 忘记是痛
  • zyj:偶然间看到的,现在是前端工程师呀,不错不错!
  • 其它