第1395天:阻止事件冒泡方法

星期四 中雨 9~14℃

阻止事件冒泡方法

昨晚遇到一个冒泡问题:

<div onclick="alert(‘第2个触发’)">
 <a id="test" href="#@第3个触发" onclick="alert(‘第1个触发’)">点我</a>
</div>

本意是希望点击 <a> 时不要执行它父级的 <div> 的 onclick,而是直接跳转页面。想了个方法,在 click 子元素时 removeAttr 父级的 onclick  :

$("#test").click(function(){
 $(this).parent().removeAttr("onclick");
})

今天早上来公司查一下,原来 jquery 有提供阻止冒泡的方法 stopPropagation() :

$("#test").click(function(event){
 event.stopPropagation();
})

参考:http://justcoding.iteye.com/blog/587876

又查一下,如果用原生 js 来写,需要用到 stopPropagationcancelBubble

function stopBubble(event) {
 //如果提供了事件对象,则这是一个非IE浏览器
 if (event.stopPropagation)
  //因此它支持W3C的 stopPropagation()方法
  event.stopPropagation();
 } else {
  //否则,我们需要使用IE的方式来取消事件冒泡
  event.cancelBubble = true;
 }
}

参考:http://hi.baidu.com/daijun2007/blog/item/bb0bf431e511b6a45edf0ec8.html

再看一下 jquery-1.4.4_source.js,里面定义了一个同样是名为 stopPropagation 的方法,所以使用 jquery 的 stopPropagation() 就不用考虑浏览器兼容的问题了。


removeClass() 比 removeAttr() 效率高

有同学进行了测试


友吧今天

优化地图传参。

RSS

上一篇:

下一篇:

发表评论

电子邮件地址不会被公开。 必填项已用*标注