jQuery事件传播,事件流

一. jQuery事件传播

在DOM2级事件模型中,一旦事件被触发。事件流首先从DOM树顶部(文档节点)向下传播。直到目标节点。然后再从目标节点向上传播到DOM树顶。从上到下的过程被称为捕获阶段。从下到上的过程被称为冒泡阶段。

利用循环体结构分别为button元素及其全部父级节点注冊一个捕获型鼠标单击类事件处理函数。

代码演示样例:

<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<title>jQuery addEventListener demo</title>
</head>
<body>
	<input type="button" value="Event对象">
	<p>捕获型事件流传播过程:</p>
</body>
<script type="text/javascript" src="jquery-2.1.1.min.js"></script>
<script type="text/javascript" >
	window.onload = function(){
    	var btn = document.getElementsByTagName("input")[0];	//获取按钮
    	var p = document.getElementsByTagName("p")[0]; 	//p元素
    	var i = 1; 	//声明并初始化一个暂时变量
    	do{	//使用do循环结构逐层注冊鼠标单击事件
        	btn.addEventListener("click", function(){	//注冊鼠标单击事件
            	p.innerHTML += "<br />("  + i++ + ")  "  + this.nodeName;
    	},true); 	//动态跟踪当前响应节点的名称
        	btn = btn.parentNode; 	//訪问上一级父元素
    	} while(btn); 	//设置循环条件,假设存在父节点
	}
</script>
</html>

以下改动addEventListener()方法的第3个參数,设置參数值为false,即注冊事件为冒泡型处理程序。

<script type="text/javascript" >
    window.onload = function(){
        var btn = document.getElementsByTagName("input")[0];	//获取button
        var p = document.getElementsByTagName("p")[0]; 	//p元素
        var i = 1; 	//声明并初始化一个暂时变量
        do{	//使用do循环结构逐层注冊鼠标单击事件
            btn.addEventListener("click", function(){	//注冊鼠标单击事件
                p.innerHTML += "<br />("  + i++ + ")  "  + this.nodeName;
        },false); 	//动态跟踪当前响应节点的名称
                this.removeEventListener("click",arguments.callee,false);	//注销当前鼠标单击事件
            btn = btn.parentNode; 	//訪问上一级父元素
        } while(btn); 	//设置循环条件,假设存在父节点
    }
</script>

二. jQuery事件流

代码演示样例:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>jQuery event flow demo</title>
</head>
    <body>
    <div>
        <div>
            <div>
                <div>
                    <div>冒泡型事件</div>
                </div>
            </div>
        </div>
    </div>
</body>
<script type="text/javascript" src="jquery-2.1.1.min.js"></script>
<script type="text/javascript" >
window.onload = function(){
    var div = document.getElementsByTagName(‘div‘);	//获取全部div元素
    for (var i = 0; i < div.length; ++i){	//遍历div元素
        div[i].onmouseover = (function(i){	//依次为每一个div元素注冊鼠标经过事件
            return function(){	//以闭包形式存储动态变量i的值。以便定位div
                div[i].style.borderColor = ‘red‘;	//定义边框的颜色样式为红色
            }
        })(i);		//向闭包内传递变量i的值
    }
    for (var i = 0; i < div.length; ++i){ 	//遍历div元素
        div[i].onmouseout = (function(i){ 	//依次为每一个div元素注冊鼠标移出事件
            return function(){	//以闭包形式存储动态变量i的值,以便定位div
                div[i].style.borderColor = ‘white‘; 	//定义边框的颜色样式为白色
            }
        })(i); 		//向闭包内传递变量i的值
    }
}
</script>
<style type="text/css">
div {
    margin:12px 10px;
    border:solid 2px blue;
}
</style>
</html>
时间: 2024-11-10 18:38:16

jQuery事件传播,事件流的相关文章

[JS]笔记12之事件机制--事件冒泡和捕获--事件监听--阻止事件传播

-->事件冒泡和捕获-->事件监听-->阻止事件传播 一.事件冒泡和捕获 1.概念:当给子元素和父元素定义了相同的事件,比如都定义了onclick事件,点击子元素时,父元素的onclick事件也会被触发.js里称这种事件连续发生的机制为事件冒泡或者事件捕获.IE浏览器:事件从里向外发生,事件从最精确对象(target)开始触发,然后到最不精确的对象(document)触发,即事件冒泡 Netscape:事件从外向里发生,事件从最不精确的对象(document)开始触发,然后到最精确对象(

Atitit. &#160;Js 冒泡事件阻止&#160;事件捕获&#160;&#160;&#160;事件传递 &#160;事件代理

Atitit.  Js 冒泡事件阻止 事件捕获   事件传递  事件代理   1. 事件冒泡1 2. 事件捕获1 3. 同时支持了事件捕获阶段和事件冒泡阶段ddEventListener的第三个参数1 4. 事件代理3 5. 冒泡还是捕获?3 6. Js 冒泡事件阻止3 6.1. 返回false5 7. 事件冒泡 使处理函数有范围较大的触发面积,在“拖拽效果”脚本中是必须的5 8. refe6 8.1.1. 浅谈事件冒泡与事件捕获 - ac黄博客精选 - SegmentFault6   1. 事

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

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

JQuery事件传播

jquery中一些事件函数使用小结,需要的朋友可以参考下. 1.$(document).ready() $(document).ready()是jQuery中响应JavaScript内置的onload事件并执行任务的一种典型方式.它和onload具有类似的效果.但是也有一些差异: 当一个文档完全下载到浏览器中时,会触发window.onload事件.而使用$(document).ready()注册的事件处理程序会在html下载完成并解析为Dom树之后,代码就可以运行,但并不意味着所有关联文件都已

jQuery中的事件和动画

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

HTML 事件(三) 事件流与事件委托

本篇主要介绍HTML DOM中的事件流和事件委托. 其他事件文章 1. HTML 事件(一) 事件的介绍 2. HTML 事件(二) 事件的注册与注销 3. HTML 事件(三) 事件流与事件委托 4. HTML 事件(四) 模拟事件操作[未发布] 目录 1. 事件流 1.1 何为事件流 1.2 事件流的三个阶段 1.3 addEventListener()注册事件流的阶段 1.4 阻止事件流的传播 2. 事件委托 2.1 何为事件委托 2.2 ul.li场景示例 2.3 JQuery的事件委托

JavaScript事件委托原理及Jquery中的事件委托

概念 事件委托,通俗来说就是将元素的事件委托给它的父级或者更外级元素处理. 事件流 事件流描述的是从页面中接收事件的顺序. 事件冒泡:事件开始由最具体的元素接收,然后逐级向上传播到较为不具体的节点(或文档). 事件捕获:事件开始由不太具体的节点接收,然后逐级向下传播到最具体的节点.它与事件冒泡是个相反的过程. DOM2级事件规定的事件流包括三个阶段: 事件捕获 目标阶段 事件冒泡 原理 事件委托就是利用事件冒泡机制实现的. 假设有一个列表,要求点击列表项弹出对应字段. <ul id="my

jQuery代码优化:事件委托

随着DOM结构的复杂化和Ajax等动态脚本技术的运用,事件委托自然浮出了水面.jQuery为绑定和委托事件提供了.bind()..live()和.delegate()方法.本文在讨论这几个方法内部实现的基础上,展示它们的优劣势及适用场合. 事件委托 事件委托的事例在现实当中比比皆是.比如,有三个同事预计会在周一收到快递.为签收快递,有两种办法:一是三个人在公司门口等快递:二是委托给前台 MM代为签收.现实当中,我们大都采用委托的方案(公司也不会容忍那么多员工站在门口就为了等快递).前台MM收到快

js事件流、事件处理程序/事件侦听器

1.事件流 事件冒泡 IE的事件流叫做事件冒泡(event bubbling),即事件开始时由最具体的元素(文档中嵌套层次最深的那个节点)接收,然后逐级向上传播到较为不具体的节点(文档). 事件捕获 事件捕获的思想是不太具体的节点应该更早的接收到事件,而最具体的节点应该在最后接收到节点.事件捕获的用意在于事件到达预定目标之前捕获它. DOM事件流 “DOM2级事件流”规定的事件流包括三个阶段:事件捕获阶段.处于目标阶段和冒泡阶段.首先发生的是事件捕获,为截获事件提供了机会.然后是实际的目标接收到