`

js的事件传播机制

 
阅读更多

JS的事件传播,以前完全不知道,今天学习了。

JS的事件(event)是向上传播的,会一直传到根元素。

比如(使用jquery语法):
Javascript代码 复制代码 收藏代码
  1. $("div").click(function(event) {
  2. alert("div clicked");
  3. });
  4. $("span").click(function(event) {
  5. alert("span clicked");
  6. });
$("div").click(function(event) {
    alert("div clicked");
});
$("span").click(function(event) {
    alert("span clicked");
});

span是div的子元素,在点击span的时候,span的click事件向上传播到div的onclick函数里,所以画面会先后弹出“span clicked"和“div clicked”。

如果不想让事件向上传播,有以下几种办法。

1.return false;
Javascript代码 复制代码 收藏代码
  1. $("div").click(function(event) {
  2. alert("div clicked");
  3. });
  4. $("span").click(function(event) {
  5. alert("span clicked");
  6. returnfalse;
  7. });
$("div").click(function(event) {
    alert("div clicked");
});
$("span").click(function(event) {
    alert("span clicked");
    return false;
});

在span的事件函数里return false,就能阻止span的click事件传到div的onclick函数。

2.调用event.target进行判断
Javascript代码 复制代码 收藏代码
  1. $("div").click(function(event) {
  2. if (event.target == this)
  3. alert("div clicked");
  4. });
  5. $("span").click(function(event) {
  6. alert("span clicked");
  7. returnfalse;
  8. });
$("div").click(function(event) {
    if (event.target == this) 
        alert("div clicked");
});
$("span").click(function(event) {
    alert("span clicked");
    return false;
});

event.target是事件发生源的DOM元素。在span的onclick函数里,event.target和this一样,都是span元素;而在div的onclick函数里,event.target是span元素,this是div元素。

3.event.stopPropagation();
Javascript代码 复制代码 收藏代码
  1. $("div").click(function(event) {
  2. alert("div clicked");
  3. });
  4. $("span").click(function(event) {
  5. alert("span clicked");
  6. event.stopPropagation();
  7. });
$("div").click(function(event) {
    alert("div clicked");
});
$("span").click(function(event) {
    alert("span clicked");
    event.stopPropagation();
});

在子元素的事件函数里调用event.stopPropagation();。

注意:虽然event.target和event.stopPropagation()是纯DOM API,但不是被所有浏览器实现了的。jquery对这两个API做了统一,所有浏览器中都能使用。


当然,事件向上传播也有他的作用。

比如一个需要highlight的例子,有一个按钮区(DIV),里面有很多个按钮(BUTTON),这些元素都是白色。当鼠标移动到DIV时,DIV需要显示成浅灰色,BUTTON们还是白色,接着再移到BUTTON上时,DIV保持浅灰色,BUTTON要变成深灰色。

实现方式是给DIV和每个BUTTON都注册一对onmouseover/onmouseout事件函数,鼠标从按外进入DIV内时,触发DIV的onmouseover,DIV变灰,鼠标再移到DIV内某个BUTTON上时,触发DIV的onmouseout,DIV恢复成白色,这时BUTTON触发了onmouseover而变深灰,而且这个mouseover的event向上传播到了DIV触发了DIV的onmouseover,DIV又变灰,效果就是,当鼠标从DIV移到BUTTON上进,DIV保持灰色。假想一下,如果这个时候DIV没有保持灰色而变回了白色,效果就会很怪。也就是说,这个时候就需要事件上传机制把BUTTON这个子元素的mouseover event上传给DIV。

再举个例子,一个table有1000个row,每个row都要注册一个onclick函数,为每个row注册事件函数写起来容易,但由于循环多和有太多的函数需要内存管理,效率会下降。这个时候就可以写一个单一的事件函数,处理row的父元素,所有row的click event都会向上传播到这个事件函数里来接受处理。1000个事件函数需要注册和管理,现在变成一个,效率自然提升很多。 
 
分享到:
评论

相关推荐

    javascript防止事件传播

    JavaScript防止事件传播是一种常见的前端开发技术,用于控制事件在DOM(文档对象模型)层次中的传播方式。事件传播包括三个阶段:捕获阶段、目标阶段和冒泡阶段。了解这三个阶段对于掌握如何阻止事件传播至关重要。 ...

    js事件监听机制(事件捕获)总结

    关于事件的传播机制,W3C标准规定了事件流分为捕获和冒泡两个阶段。捕获阶段是从根节点开始,逐级向下直到目标节点;冒泡阶段则是从目标节点逐级向上,直到根节点。默认情况下,事件处理是采用冒泡的方式进行,除非...

    js 事件的传播机制(实例讲解)

    JavaScript 事件的传播机制是理解JavaScript事件处理的关键概念之一,它描述了事件如何从文档的根元素逐层向下传递到事件触发的特定元素,以及如何返回。事件的传播分为三个阶段:捕获阶段、目标阶段和冒泡阶段。 1...

    js事件机制 .pdf

    ### JavaScript事件机制详解 #### 一、引言 在学习编程语言的过程中,"事件"这一概念往往是初学者遇到的一个难点,然而它又是编程中极为重要的一个组成部分。在JavaScript中,事件处理更是不可或缺的一部分,它是...

    使用JavaScript事件综合查询,js事件大全

    JavaScript事件是浏览器或Node.js环境中发生的特定行为,如用户点击按钮、页面加载完成或输入框获得焦点等。事件驱动编程是JavaScript的核心特性之一,通过监听和处理这些事件,我们可以创建响应式的用户体验。 二...

    事件集合js事件集合js事件集合

    此外,还有一些高级事件机制,如事件委托(event delegation),它利用事件冒泡原理,将事件监听器添加到父元素上,从而减少内存消耗和提高性能。还有`Event`对象,它提供了`preventDefault()`方法阻止默认行为(如...

    JavaScript程序设计——事件处理实验报告.docx

    实验报告详细介绍了JavaScript事件处理的相关知识,这在Web开发中是非常关键的一部分,因为事件是用户与网页交互的主要方式。以下是对各个知识点的详细说明: 1. **JavaScript事件基本概念**: - **事件**:是用户...

    【JavaScript源代码】JavaScript中事件冒泡机制示例详析.docx

    JavaScript中的事件冒泡机制是DOM事件处理的核心概念之一,它涉及到事件在DOM树中的传播方式。事件流主要有三种阶段:事件捕获阶段、处于目标阶段和事件冒泡阶段。 事件捕获阶段是从DOM树的根节点开始,沿着树向下...

    Javascript 事件冒泡机制详细介绍

    Javascript中的事件冒泡机制是其事件处理模型的重要组成部分,它描述了当一个事件在DOM元素上发生时,这个事件不仅仅会在该元素上触发,还会向上逐级在父级元素中传播,直至到达DOM树的根部。这种机制允许开发者在...

    Html dom _BOM 模型 _事件处理机制 _面向对象基础

    以上内容中包含了对DOM中各种对象的属性和方法的使用,BOM模型的核心对象window及其常用方法,JavaScript中的事件处理机制,包括事件是如何产生的、事件对象的特性以及事件冒泡现象,以及面向对象编程的基础知识,...

    JS传播事件、取消事件默认行为、阻止事件传播详解

    JavaScript中的事件处理是Web开发中的核心概念,它涉及到事件的传播、取消默认行为以及阻止事件传播等关键点。本文将详细解析这些概念。 首先,**事件处理程序的返回值**在JavaScript中扮演着一个特殊的角色。当...

    JavaScript事件机制

    ### JavaScript事件机制详解 #### 一、事件绑定方式 在JavaScript中,事件绑定是指将一个事件处理函数与特定的DOM元素关联起来的过程。这可以通过多种方式进行实现。 ##### 内联事件处理程序 这是一种较为简单的...

    javascript事件详解

    总的来说,JavaScript事件是构建动态网页的关键工具,理解并掌握事件处理机制、事件阶段和事件对象的使用,能够帮助开发者编写更高效、更灵活的交互代码。在实际开发中,应充分利用事件委托、事件监听器等高级技巧,...

    【移动端兼容问题研究】javascript事件机制详解(涉及移动兼容)1

    JavaScript 事件机制是网页交互的核心,它使得网页具备响应用户操作的能力。在移动端,考虑到不同设备和浏览器的差异,理解事件机制以及如何处理兼容性问题至关重要。本文将深入探讨JavaScript事件的捕获/冒泡阶段,...

    javascript事件查询综合

    总结来说,"javascript事件查询综合"这个文档很可能详细介绍了JavaScript事件处理的各个方面,包括事件绑定、事件对象、事件传播机制、事件处理的控制以及高级话题如事件委托和现代事件API。理解和熟练运用这些知识...

    javascript 中事件冒泡和事件捕获机制的详解

    事件捕获则是与冒泡相反的传播机制,它表示事件从document的根节点开始向下传播,直到触发事件的元素。在事件捕获过程中,事件首先被最顶层的元素捕获,然后依次经过每个子元素,直至目标元素。使用事件捕获可以保证...

    深入理解JS DOM事件机制

    JavaScript DOM事件机制是Web开发中的核心概念之一,它关乎如何响应用户与网页元素的交互。在深入理解这一机制前,我们需要了解三个关键术语:事件流、事件冒泡和事件捕获。 1. 事件流: 事件流描述了事件在HTML...

    javascript事件综合查询

    在JavaScript代码模块中,事件处理是一个核心概念,涉及到事件触发、事件监听和事件传播等多个方面。本篇将深入探讨JavaScript事件综合查询的相关知识点。 一、事件模型 1. DOM(Document Object Model)事件模型...

    10-JS事件基础.pptx

    在这个"10-JS事件基础"的教程中,我们将深入理解JavaScript中的事件处理机制,包括事件对象、事件冒泡、DOM事件流以及鼠标和键盘事件。 首先,让我们了解一下什么是事件对象。在JavaScript中,每当发生一个事件(如...

Global site tag (gtag.js) - Google Analytics