event.cancelBubble与event.stopPropagation()

由于HTML中的对象都是层次结构,比如一个Table包含了多个TR,一个TR包含了多个TD,Bubble就是一个事件可以从子节点向

父节点传递,比如鼠标点击了一个TD,当前的event.srcElement就是这个TD,但是这种冒泡机制使你可以从TR或者Table处截

获这个点击事件,但是如果你设置此td的event.cancelBubble=true,则就不能上传事件,即tr和table的点击事件不响应td

的点击事件。比如下面的例子:οnclick="tableA_rowA_click事件会同时引起tableA的onclick事件,而tableA_rowB_click

阻止了事件冒泡则不会引起tableA的事件。这不是一个标准性的属性,FF不支持,IE支持,其它浏览器未测。
<html> 
    <body> 
    <table border="1" width="26%" id="tableA" οnclick="alert('点击了tableA')"> 
        <tr οnclick="tableA_rowA_click()"> 
            <td width="106">一般</td> 
        </tr> 
        <tr οnclick="tableA_rowB_click(event)"> 
            <td width="106">阻止消息上传</td> 
        </tr> 
    </table> 
    </body> 
</html> 


<script language="javascript"> 
    function tableA_rowA_click(){   
        alert('点击了tableA的rowA');   
    }   

    function tableA_rowB_click(event){   
        alert('点击了tableA的rowB');   
        event.cancelBubble=true;   
    }   
</script>
在IE的事件机制中,触发事件会从子元素向父元素逐级上传,就是说,如果子元素触发了单击事件,那么也会触发父元素的

单击事件;event.cancelBubble=true;可以停止事件继续上传。FF中事件也是从子元素向父元素逐级上传,但FF不支持

event.cancelBubble,FF支持stopPropagation()方法。将上面的方法改为:
function tableA_rowB_click(event){   
        alert('点击了tableA的rowB');   
event.stopPropagation();
    } 
则和IE中的效果是一样的。可以这样写一个方法兼容:
function stopBubble(event) {
//如果提供了事件对象,则这是一个非IE浏览器
if (event.stopPropagation)
//因此它支持W3C的 stopPropagation()方法
event.stopPropagation();
else
//否则,我们需要使用IE的方式来取消事件冒泡
event.cancelBubble = true;
}

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值