事件

当我们在打开一个页面的时候。浏览器会对页面进行解释运行,这实际上是通过运行事件来驱动的。在页面载入事件时,运行Load()事件,是这个事件实现浏览器解释运行代码的过程。

事件机制

事件中的冒泡现象

冒泡现象说的是事件运行顺序,当一个对象上触发了一个事件。假设未定义此事件的处理程序或者事件返回true,那么这个事件就会向这个对象的父级对象传播,从里到外,直到他被处理(父级对象全部同类事件都被激活),或者它到达了对象层次的顶层(即document对象)。

通俗的讲:假把设一杯水分成不同颜色的几层。加热水的时候,当底层中有一个气泡出现时,气泡会一层层的上升,直到最层顶部。

而我们无论在哪一层观察都能捕捉到这个气泡,这杯水就是我们的”DOM“,”气泡“就是我们的事情气泡。

事件冒泡演示样例

例如以下代码所看到的

<span style="font-size:14px;"><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>JavaScript</title>
<style type="text/css">
#box {width:200px; height:100px; border:2px solid blue}
#box h5 {margin:0; padding:2px 5px; font-size:18px; text-align:right; background:blue; cursor:move}
#box h5 a {text-decoration:none; color:#FFF}
</style>
</head> <body>
<div id="box">
<h5 onclick="startDrag();"><a onclick="closeBox();" href="javascript:void(0);">close</a></h5>
<div id="testInfo"></div>
</div>
<script type="text/javascript">
function startDrag()
{
document.getElementById('testInfo').innerHTML += 'startDrag<br/>';
}
function closeBox()
{
document.getElementById('testInfo').innerHTML += 'closeBox<br/>';
}
</script>
</body>
</html></span>

执行结果如图1:

图1

由此我们能够看到,对于同一事件来说(都是onclick事件),先是底层触发。再是上一层触发事件,也就是”从里向外冒泡“。

而当我们把父类的h5标签的事件改为onmousedown 的时候,我们会看到以下的结果。尽管针对冒泡而言应该是里层的先触发,可是对于事件onmousedown来说,触发时机遭遇onclick事件。

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvbG92ZXN1bW1lcmZvcmV2ZXI=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="" style="font-family:'Microsoft YaHei'">

图2

那怎样阻止冒泡?

js阻止冒泡现象

例如以下代码所看到的:

<span style="font-size:14px;"><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>JavaScript</title>
<style type="text/css">
#box {width:200px; height:100px; border:2px solid blue}
#box h5 {margin:0; padding:2px 5px; font-size:18px; text-align:right; background:blue; cursor:move}
#box h5 a {text-decoration:none; color:#FFF}
</style>
</head> <body>
<div id="box">
<h5 onclick="startDrag();"><a onclick="closeBox();" href="http://blog.csdn.net/lovesummerforever">close</a></h5>
<div id="testInfo"></div>
</div>
<script type="text/javascript">
function startDrag()
{
document.getElementById('testInfo').innerHTML += 'startDrag<br/>'; }
function closeBox(e)
{
document.getElementById('testInfo').innerHTML += 'closeBox<br/>';
stopPropagation(e);
} function stopPropagation(e) {
e = e || window.event;
if(e.stopPropagation) { //W3C阻止冒泡方法
e.stopPropagation();
} else {
e.cancelBubble = true; //IE阻止冒泡方法
}
}
</script>
</body>
</html></span>

jquery阻止冒泡现象

假设是通过jquery訪问的话。阻止冒泡现象方法例如以下

<span style="font-size:14px;"> $(function() {
$("a").click(function(event) {
return false;
});
});</span>

或者

<span style="font-size:14px;">$(function() {
$("a").click(function(event) {
event.stopPropagation();
});
});</span>

上述运行后,我们会发现。运行return false后。<a>标签不再跳转,而其它的都跳转。怎么阻止事件默认的跳转行为呢?



       另一个方法是event.preventDefault() ,该方法并非处理事件的冒泡。而是阻止事件的默认行为。

return false方法既阻止了冒泡,也阻止了事件的默认行为,event.stopPropagation()仅仅阻止了事件的冒泡行为,但不阻止事件的默认行为。

恶补jquery(四)jquery中事件--冒泡的更多相关文章

  1. JQuery中事件冒泡

    JQuery中事件冒泡 定义 在一个对象上触发某类事件,就会执行此事件程序,如果没有处理事件就会向这个对象的父级对象传播 直至它被处理,最顶层老大为document对象. 作用 事件冒泡允许多个操作被 ...

  2. jQuery中事件冒泡问题及处理

    在为一个元素添加事件时,经常会出现的一个问题就是事件冒泡.例如在div中嵌套了一个span元素,为div和span都添加了事件点击,如果点击span会导致span和div元素相继触发监听事件.顺序是从 ...

  3. 从零开始学 Web 之 jQuery(七)事件冒泡,事件参数对象,链式编程原理

    大家好,这里是「 从零开始学 Web 系列教程 」,并在下列地址同步更新...... github:https://github.com/Daotin/Web 微信公众号:Web前端之巅 博客园:ht ...

  4. 自己动手丰衣足食,h5手机端jquery弹窗插件(事件冒泡、单例模式、遮盖部分禁止默认滚动)

    感谢浏览,欢迎交流=.= 公司开发微信网页多处需要使用弹窗,使用jquery-ui的定制化下载仍需要150多kb,想来有些奢侈(最终下来只有11kb,压缩后2kb,啊,我的神), 手机端弹窗方式与pc ...

  5. 恶补web之八:jQuery(3)

    jquery和其他js框架.jQuery使用$作为jQuery的简写,但是还有很多js框架,比如: MooTools,Backbone,Sammy,Cappuccino,Knockout,JavaSc ...

  6. 浅谈javascript中事件冒泡与事件捕获

    事件冒泡:一个事件会顺着他的层级一直往上传,一直传到document上为止,即从盒模型上看是从内到外的过程. 例: <!DOCTYPE html><html lang="e ...

  7. JS中 事件冒泡与事件捕获

    [JS中的事件流]  1.事件冒泡:当某DOm元素触发一种事件时,会从当前节点开始,逐级往上触发其祖先节点的同类型事件,直到DOM根节点:   >>>什么情况下会产生事件冒泡 ① D ...

  8. 对于js中事件冒泡的理解分析

    一. 事件 事件的三个阶段:事件捕获 -> 事件目标 -> 事件冒泡 捕获阶段:先由文档的根节点document往事件触发对象,从外向内捕获事件对象: 目标阶段:到达目标事件位置(事发地) ...

  9. js中事件冒泡,事件捕获详解

    一.事件流 事件是js与HTML交互的基础,事件流描述的是页面接受事件的顺序,而事件流又分为三个阶段:捕获阶段.目标阶段和冒泡阶段. 如果单纯的事件处理,事件捕获和事件冒泡二选一即可,导致两者并存的原 ...

随机推荐

  1. N使用exus2打造企业maven仓库(三)

    假设项目中,我没有使用maven,我应该做出选择,或为项目.或者用它来推动这个项目从maven.有人会问,为什么maven?无需maven我们没有很好的操作. 这里,只说两件事情我最欣赏:第一点是管理 ...

  2. 施用 maven shade plugin 解决 jar 或类的多版本冲突

    施用 maven shade plugin 解决 jar 或类的多版本冲突   使用 maven shade plugin 解决 jar 或类的多版本冲突java 应用经常会碰到的依赖的三方库出现版本 ...

  3. 日本IT工作有感

    不知不觉,在日本关西已经呆了快一个月了. 除了饮食有点不是非常习惯.其他感觉都还好. 日本这边的文化还是非常偏向project师的,project师的社会地位非常高,公司里面也没有国内所谓35岁的焦虑 ...

  4. android程序中使用命令行及获得命令行执行后的内容

    在开发android项目中,需要在程序中使用命令行执行,获得命令行执行后的结果并做处理. 下面是自己写的一个小例子,供以后参考使用: public String android_command(){ ...

  5. ios23- 文件下载(同步和异步)

    1.第一步:创建一个单例视图 #import <UIKit/UIKit.h> @interface ios23_downViewController : UIViewController& ...

  6. cell中button怎么得到对应cell的indexpath 以及关于UITableViewCellContentView的问题

    ============================================================ 博文原创,转载请声明出处 电子咖啡-专注于移动互联网 ============ ...

  7. Codeforces 282E Sausage Maximization(字典树)

    题目链接:282E Sausage Maximization 题目大意:给定一个序列A.要求从中选取一个前缀,一个后缀,能够为空,当时不能重叠.亦或和最大. 解题思路:预处理出前缀后缀亦或和,然后在字 ...

  8. Eclipse背景和匹配出现单词的一些设置

    Eclipse的背景色和关键词的设置这里就不多说了,只说明设置路径: 背景色:[Window]--->[Preference]-->[General]--->[Editors]--- ...

  9. VC/MFC 使edit控件不能进行粘贴操作

    这里使用消息拦截的方法 BOOL PersonDlg::PreTranslateMessage(MSG* pMsg) { if (GetDlgItem(IDC_EDIT_USER_ID)->m_ ...

  10. windows线程同步的总结

    一 线程 1)如果你正在编写C/C++代码,决不应该调用CreateThread.相反,应该使用VisualC++运行期库函数_beginthreadex,退出也应该使用_endthreadex.如果 ...