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

 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN"
"http://www.w3.org/TR/html4/strict.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>事件冒泡演示</title>
<meta name="author" content="Administrator" />
<script src="script/jquery-1.12.2.js" type="text/javascript"></script>
<style type="text/css">
#content {
background-color: #0000FF;
}
#msg {
background-color: #FF0000;
}
</style>
<!-- Date: 2016-03-26 -->
</head>
<body>
<div id="content">
<p>
外层div元素
</p>
<span>内层span元素</span>
<p>
外层div元素
</p>
</div>
<div id="msg"></div>
<script type="text/javascript">
$(function() {
//对span元素添加事件
$("#content span").bind("click", function() {
var text = $("#msg").html()+"<p>内层span元素被点击!</p>";
$("#msg").html(text);
});
//对
$("#content").bind("click", function() {
var text = $("#msg").html()+"<p>外层div元素被点击!</p>";
$("#msg").html(text);
}); $("body").bind("click", function() {
var text = $("#msg").html()+"<p>body元素被点击!</p>";
$("#msg").html(text);
});
});
</script>
</body>
</html>

为了更好地解决这个问题,我们为事件中的function传入一个参数event,并且调用stopPropagation()方法

下面演示:

 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN"
"http://www.w3.org/TR/html4/strict.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>事件冒泡演示</title>
<meta name="author" content="Administrator" />
<script src="script/jquery-1.12.2.js" type="text/javascript"></script>
<style type="text/css">
#content {
background-color: #0000FF;
}
#msg {
background-color: #FF0000;
}
</style>
<!-- Date: 2016-03-26 -->
</head>
<body>
<div id="content">
<p>
外层div元素
</p>
<span>内层span元素</span>
<p>
外层div元素
</p>
</div>
<div id="msg"></div>
<script type="text/javascript">
$(function() {
//对span元素添加事件
$("#content span").bind("click", function(event) {
var text = $("#msg").html()+"<p>内层span元素被点击!</p>";
$("#msg").html(text);
event.stopPropagation();
});
//对
$("#content").bind("click", function(event) {
var text = $("#msg").html()+"<p>外层div元素被点击!</p>";
$("#msg").html(text);
event.stopPropagation();
}); $("body").bind("click", function(event) {
var text = $("#msg").html()+"<p>body元素被点击!</p>";
$("#msg").html(text);
event.stopPropagation();
});
});
</script>
</body>
</html>

jQuery中事件冒泡问题及处理的更多相关文章

  1. JQuery中事件冒泡

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

  2. 恶补jquery(四)jquery中事件--冒泡

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

  3. Jquery阻断事件冒泡(转载)

    JQuery阻止事件冒泡 冒泡事件就是点击子节点,会向上触发父节点,祖先节点的点击事件. 我们在平时的开发过程中,肯定会遇到在一个div(这个div可以是元素)包裹一个div的情况,但是呢,在这两个d ...

  4. jquery取消事件冒泡的三种方法展示

    jquery取消事件冒泡的三种方法展示 html代码 <!doctype html> <html> <head> <meta charset="ut ...

  5. jQuery中事件对象e的事件冒泡用法示例(事件冒泡与阻止冒泡)

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  6. jquery中防止冒泡事件

    冒泡事件就是点击子节点,会向上触发父节点,祖先节点的点击事件. 下面是html代码部分: <body> <div id="content"> 外层div元素 ...

  7. JQuery阻止事件冒泡

    冒泡事件就是点击子节点,会向上触发父节点,祖先节点的点击事件. 我们在平时的开发过程中,肯定会遇到在一个div(这个div可以是元素)包裹一个div的情况,但是呢,在这两个div上都添加了事件,如果点 ...

  8. jQuery中事件绑定到bind、live、delegate、on方法的探究

    1. 给页面上的某个元素绑定事件,最初采用下面的方式实现: $(‘selector’).click(function(){ //code }); 缺点: 不能同时绑定多个事件,不能绑定动态的元素. 后 ...

  9. js阻止冒泡及jquery阻止事件冒泡示例介绍

    js阻止冒泡 在阻止冒泡的过程中,W3C和IE采用的不同的方法,那么我们必须做以下兼容. 复制代码 代码如下: function stopPro(evt){ var e = evt || window ...

随机推荐

  1. 图解linux下top命令的使用

    top命令经常用来监控linux的系统状况,比如cpu.内存的使用,程序员基本都知道这个命令,但比较奇怪的是能用好它的人却很少,例如top监控视图中内存数值的含义就有不少的曲解. 本文通过一个运行中的 ...

  2. 【模拟】NEERC15 A Adjustment Office (2015-2016 ACM-ICPC)(Codeforces GYM 100851)

    题目链接: http://codeforces.com/gym/100851 题目大意: 一个N*N的矩阵A,Ai,j=i+j,Q次操作,每次分两种,R r取出第r行还未被取的所有数,并输出和.C c ...

  3. 保留n位四舍五入小数

    一:可选择保留位数,注释很解释的很详细,上图 二:全部代码 using System; using System.Collections.Generic; using System.Component ...

  4. E - Find The Multiple

    题目大意 找倍数 给你一个数,找到一个能数是它的倍数的数,当然这个数只能由0和1组成.......这个数最大200,比较唬人,其实这个数在最大也不超过2^64.....简单广搜一下 ///////// ...

  5. UIView和CALayer有什么关系

    view是对layer的一种封装,你对view的很多操作事实上是对layer的操作,之所以会出现这两个东西是因为1.view支持很多手势的交互,你所操作iphone的各种点击,拖动等等.2.layer ...

  6. python面向对象【初级篇】

    概述 python支持多种编程范式:面向过程.面向对象.面向切面(装饰器部分)等. 面向过程:根据业务逻辑从上到下写垒代码 函数式:将某功能代码封装到函数中,日后便无需重复编写,仅调用函数即可 面向对 ...

  7. SVN安装图解

    SVN服务器搭建和使用(一) Subversion是优秀的版本控制工具,其具体的的优点和详细介绍,这里就不再多说. 首先来下载和搭建SVN服务器. 现在Subversion已经迁移到apache网站上 ...

  8. random.sample

    import random k = random.sample(xrange(0x41, 0x5b), 26) print k import random k = random.sample(xran ...

  9. What is therelationship between @EJB and ejb-ref/ejb-local-ref?

    http://glassfish.java.net/javaee5/ejb/EJB_FAQ.html What is therelationship between @EJB and ejb-ref/ ...

  10. [Javascript] Automating Releases with semantic-release

    There are so many repeated steps when releasing a new version of a library. The tool semantic-releas ...