事件冒泡
事件冒泡是个很常见的问题,不过我之前没听说过,所以这里只是做个笔记,如果了解事件冒泡,并清楚如何处理的,可以直接跳过这篇文章。下面我们看下这面这demo,点击红色区域,会弹出1,点击灰色,会弹出2。
alert(2);
alert(1);
$(
"#div1"
).click(
function
(){
alert(1);
});
$(
"#div2"
).click(
function
(){
alert(2);
});
|
处理办法其实很简单,有两种,一种就是“e.stopPropagation();”,另外一种就是“return false;”。
alert(2);
alert(1);
$(
"#div1"
).click(
function
(){
alert(1);
});
$(
"#div2"
).click(
function
(e){
e.stopPropagation();
alert(2);
});
|
或者:
$(
"#div1"
).click(
function
(){
alert(1);
});
$(
"#div2"
).click(
function
(e){
alert(2);
return
false
;
});
|
两种解决办法的区别就是,return false必须放在方法最后,不然之后的代码也就不执行了,也就是说,当你把return false放在最头部的时候,不仅阻止了事件往上冒泡,而且阻止了事件本身。
关于在EonerCMS里哪里会用到阻止冒泡呢,看下这张图吧
由于title区域的拖动事件执行顺序是mousedown->mousemove,所以在title区域里的最大化、最小化等按钮,他们的事件虽然是click,但click默认也执行了mousedown,所以这里需要先统一阻止冒泡。
//组织冒泡,之前对窗口绑定过事件
obj.find(
"a"
).bind(
"mousedown"
,
function
(e){
e.stopPropagation();
});
|
本文转自胡尐睿丶博客园博客,原文链接:http://www.cnblogs.com/hooray/archive/2011/10/04/2198760.html,如需转载请自行联系原作者