jQuery中的事件冒泡

1.什么是冒泡

eg:

<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
    <title>事件冒泡</title>
    <script src="../../js/jQuery1.11.1.js"></script>
    <script type="text/javascript">
        $(function () {
            //为span元素绑定click事件
            $(‘span‘).bind(‘click‘, function () {
                var txt = $(‘#msg‘).html() + ‘<p>内层span元素被点击</p>‘;
                $(‘#msg‘).html(txt);

            });
            //为span元素绑定click事件
            $(‘#content‘).bind(‘click‘, function () {
                var txt = $(‘#msg‘).html() + ‘<p>外层div元素被点击</p>‘;
                $(‘#msg‘).html(txt);
            });
            //为span元素绑定click事件
            $(‘body‘).bind(‘click‘, function () {
                var txt = $(‘#msg‘).html() + ‘<p>body元素被点击</p>‘;
                $(‘#msg‘).html(txt);
            });
        });

    </script>
</head>
<body>
    <div id="content">
        外层div元素
        <span>内层span元素</span>
    </div>
    <div id="msg"></div>
</body>
</html>

当你单击‘内层span元素’时,即触发<span>元素的click事件时,会输出3条记录

即:

内层span元素被点击

外层div元素被点击

body元素被点击

这就是事件冒泡引起的。

2.事件冒泡引发的问题

01.事件对象

在程序中使用事件对象,只需要为函数添加一个参数,jQuery代码如下:

$(‘element‘).bind(‘click‘,function(event){  //event:事件对象

});

02.停止事件冒泡

在jQuery中提供了stopPropagation()方法来停止事件冒泡

以span元素绑定click事件为例:

 //为span元素绑定click事件
            $(‘span‘).bind(‘click‘, function (event) {  //event:事件对象
                var txt = $(‘#msg‘).html() + ‘<p>内层span元素被点击</p>‘;
                $(‘#msg‘).html(txt);
                event.stopPropagation(); //停止事件冒泡
            });

当你单击‘内层span元素’时,即触发<span>元素的click事件时,这时只会输出1条记录

即:

内层span元素被点击

这样就解决了冒泡问题

03.阻止默认行为

网页中的元素有自己默认的行为,例如,单击超链接后会跳转,单击‘提交’表单会提交,有时需要阻止元素的默认行为

在jQuery中,提供了preventDefault()方法来阻止元素的默认行为。

eg:以输入提交为例

<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
    <title></title>
    <script src="../../js/jQuery1.11.1.js"></script>
    <script type="text/javascript">
        $(function () {
            $(‘#sub‘).bind(‘click‘, function (event) {
                var username = $(‘#username‘).val(); //获取元素的值
                if (username == "") {    //判断是否为空
                    alert(‘文本框的值不能为空‘);  //提示信息
                    event.preventDefault();  //阻止默认行为(表单提交)
                }
            });
        });
    </script>
</head>
<body>
    <form action="/">
        用户名:<input type="text" id="username" />
        <input type="submit" value="提交" id="sub" />
    </form>
</body>
</html>

假如你不输入内容,这样就可以阻止默认行为(表单提交)

总结:如果想同时对事件停止冒泡和默认行为,可以在事件处理函数中返回false。这是对在事件对象上同时调用stopPropagation()方法和preventDefault()方法的一种简写方式。

在上面表单的例子中,可以把

event.preventDefault();  //阻止默认行为(表单提交)改写为:return false;

也可以把事件冒泡中的

event.stopPropagation(); //停止事件冒泡改写为:return false;

04.事件捕获

05.事件对象的属性

事件对象的属性 详情请参考:http://www.w3school.com.cn/jsref/dom_obj_event.asp

时间: 2024-08-05 19:28:37

jQuery中的事件冒泡的相关文章

JQuery中的事件冒泡和阻止事件的传播行为

之前的这篇博客详细地介绍了javascript中的事件冒泡和事件捕获,以及DOM事件流.现在我们来看下,JQuery框架中的事件冒泡问题,以及如何阻止事件的传播行为. 1.JQuery中的事件绑定,都是属于事件冒泡. 这篇博客介绍了JQuery中绑定事件处理函数的几种方式,从中可以看到:这几种绑定方式,都不允许我们传递事件类型(是事件冒泡,还是事件捕获).而javascript原生提供的addEventListener()则允许我们设置事件的类型. <script> $(function(){

jQuery 中的事件冒泡和阻止默认行为

1.事件冒泡: 当点击内部 <span> 元素时,会触发自身及外层 <div> 和 <body> 的点击事件,这就是事件冒泡引起的.事件会随着 DOM 的层次结构依次向上传播. <%@ page language="java" import="java.util.*" pageEncoding="utf-8"%> <% String path = request.getContextPath(

关于JQuery中的事件冒泡

什么是事件冒泡? 事件冒泡就是当父元素和子元素存在同一事件时在子元素的事件处理程序中会自动调用其父级元素的事件处理程序. demo: <!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>

JQuery中阻止事件冒泡方式及其区别

方式一:event.stopPropagation(); 1 $("#div1").mousedown(function(event){ 2 event.stopPropagation(); 3 }); 方式二:return false; 1 $("#div1").mousedown(function(event){ 2 return false; 3 }); 但是这两种方式是有区别的.return false 不仅阻止了事件往上冒泡,而且阻止了事件本身.event

jQuery中的事件和动画

一.jQuery中的事件 加载DOM 在JS中等待页面加载完成通常使用window.onload方法,而在jQuery中则使用$(document).ready()方法来替代传统的window.onload方法.这两者有很大的不同: 执行时机 window.onload方法是在网页所有的元素(包括元素关联的文件)完全加载到浏览器后才能执行.而Query中的$(document).ready()方法,在DOM载入就绪就可以对其操纵并调用它绑定的函数,此时网页中的所有元素可能并没有下载完毕. 有时我

JQuery中的事件委托机制:delegate和undelegate

考虑下面这种场景:如果1个div下面有3个button,点击每个按钮的时候,需要打印出当前按钮的ID. <div id="parent"> <input type="button" id="a" value="1"></input> <input type="button" id="b" value="2"></i

锋利的jQuery读书笔记---jQuery中的事件

jQuery中的事件: 1.加载DOM:注意window.onload和$(document).ready()的不同 2.事件绑定 3.合成事件 --2和3的详细信息见代码- <!DOCTYPE html> <html> <head lang="en"> <meta charset="UTF-8"> <script type="text/javascript" src="../../

Jquery:Jquery中的事件&lt;二&gt;

这几天快忙死了,办了离职还得办入职,完全打乱了我的计划,但是能有一个理想的工作,还是很开心的,以后加把劲,争取把计划再赶上来!不说了,学习!!! 五.事件对象的属性 1.event.type:获取事件的类型,其中event是事件的对象. 2.event.preventDefaule(),在上一个学习笔记中已经有介绍了,该方法是阻止默认的事件事件行为.event.stopPropagation(),该方法的作业是阻止事件的冒泡. 3.event.target,它的作用是获取到触发事件的元素.通过返

jQuery中的事件绑定方法

在jQuery中,事件绑定方法大致有四种:bind(),live(), delegate(),和on(). 那么在工作中应该如何选择呢?首先要了解四种方法的区别和各自的特点. 在了解这些之前,首先要知道,不管你用的是(live/ bind / delegate)之中那个方法,最终都是jQuery底层都是调用on方法来完成最终的事件绑定;.unbind(), .die(), .undelegate(),也是一样的都是通过.off()来实现的; 因此从某种角度来讲除了在书写的方便程度及习惯上挑选,不