星期四 中雨 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();
})
又查一下,如果用原生 js 来写,需要用到 stopPropagation 和 cancelBubble:
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() 效率高
有同学进行了测试。
友吧今天
优化地图传参。
发表评论