`
yourkenny
  • 浏览: 11733 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

javascript的捕获机制--冒泡事件&捕获型事件

阅读更多
事件流
JavaScript 的事件是以一种流的形式存在的,一个事件会有多个元素同时响应。有时候这不是我们想要的,我们只需要某个特定的元素响应我们的绑定事件就可以了。
事件分类
捕获型事件(非IE)、冒泡型事件(所有浏览器都支持)
捕获型事件是自上而下的,而冒泡型事件是自下而上的。下面我用一个图来直观表示:

冒泡型事件我们在工作中可能会比较多遇到,但捕获型事件怎样才会执行到呢,如果我们想要在非 IE 浏览器中要创建捕获型事件,只需将 addEventListener 的第三个参数设为true就好了。

ID为div1和div2的两个元素都被绑定了捕捉阶段的事件处理函数,这样:
当点击#div1(蓝色区域)时,应该会alert出”div1″
当点击#div2(黄色区域)时,应该会先alert出”div1″,再alert出”div2″,因为在事件捕捉阶段,事件是从根元素向下传播的,#div1是#div2的父元素,自然绑定在#div1上的click事件也会先于#div2上的click事件被执行。
冒泡型事件例子:
01
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
02
<html xmlns="http://www.w3.org/1999/xhtml">
03
<head>
04
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
05
<title>冒泡事件</title>
06
<script type="text/javascript">
07
var i = 1;
08
function Add(sText,objText)
09
{
10
    document.getElementById("Console").innerHTML +=sText + "执行顺序:" + i + "<br />" + "<hr />";
11
        i = i + 1;
12
        //window.event.cancelBubble = true;
13
}
14
</script>
15
</head>
16

17
<body onclick="Add('body事件触发<br />','body')">
18
<div onclick="Add('div事件触发<br />','div')">
19
    <p onclick="Add('p事件触发<br />','p')" style="background:#c00;">点击</p>
20
</div>
21
<div id="Console" style="border:solid 1px #ee0; background:#ffc;"></div>
22

23
</body>
24
</html>
从这个例子我们可以很清楚的看到事件冒泡是从目标元素 P 一直上升到 body 元素。
阻止事件冒泡
如下有一个函数兼容了 IE 和其它浏览器的阻止事件冒泡
1
function stopBubble(e) {
2
    //如果提供了事件对象,则这是一个非IE浏览器
3
    if ( e && e.stopPropagation )
4
        //因此它支持W3C的stopPropagation()方法
5
        e.stopPropagation();
6
    else
7
        //否则,我们需要使用IE的方式来取消事件冒泡
8
        window.event.cancelBubble = true;
9
}
在 IE 并没有 stopPropagation 方法,但我们可以通过 window.event.cancelBubble 来阻止事件冒泡。
监听函数
IE : attachEvent、detachEvent
非IE: addEventListener、removeEventListener
除了上面四个函数还有一个比较通用的方法是 document.getElmentById(元素ID).onclick = function(){}
事件对象
当触发事件,在监听函数执行函数里怎样才可以获取事件对象呢?在IE 中用window.event.srcElement而在非IE浏览器则用e.currentTarget
例代码:
01
btn.onclick = ctdClickEvent;
02

03
function ctdClickEvent(e)
04
{
05
    if( !-[1,] ) //IE
06
    {
07
        var readonly = "readOnly";
08
        var obj = window.event.srcElement;
09
    }
10
    else
11
    {
12
        //非IE
13
        var readonly = "readonly";
14
        var obj = e.currentTarget;
15
    }
16

17
    var id = obj.id.replace("btn_","");
18

19
    if( obj.value=="此项改为不续费" )
20
    {
21
        ......    
22
    }
23
    else
24
    {
25
        .......
26
    }
27
    sumPrice();
28
}
分享到:
评论

相关推荐

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

    javascript 中事件冒泡和事件捕获机制的详解 二者作用:描述事件触发时序问题 事件捕获:从document到触发事件的那个节点,即自上而下的去触发事件—由外到内 事件冒泡:自下而上的去触发事件—由内到外 绑定事件...

    js事件机制----捕获与冒泡机制实例分析

    JavaScript事件机制是JavaScript...总的来说,理解JavaScript的事件捕获与冒泡机制是编写高效、可维护的交互式Web应用的关键。通过合理利用这两种机制,开发者可以实现复杂的用户交互,同时确保代码的效率和可扩展性。

    简析JavaScript事件、以及捕获和冒泡

    本文将深入探讨JavaScript事件机制,特别是事件的捕获和冒泡阶段。 首先,理解JavaScript事件的基础概念至关重要。事件是用户或浏览器在与网页交互时发生的动作,比如点击按钮、页面加载或滚动等。当这些事件发生时...

    JavaScript事件机制详细研究

    事件机制的原理是基于浏览器的事件模型,分为两种:冒泡型和捕获型。冒泡型的事件从最具体的元素开始触发,逐步向上冒泡到最顶层的元素;捕获型的事件从最顶层的元素开始捕获,逐步向下捕获到最具体的元素。 在 ...

    【JavaScript源代码】javascript事件冒泡,事件捕获和事件委托详解.docx

    JavaScript中的事件处理是Web开发中的核心概念,主要涉及事件冒泡、事件捕获以及事件委托。这三种机制在处理用户交互和DOM元素之间的事件时起着至关重要的作用。 1. **事件冒泡**:事件冒泡是事件处理的默认模式,...

    JS冒泡事件与事件捕获实例详解

    冒泡事件和事件捕获是JavaScript中...总之,冒泡事件与事件捕获是JavaScript中事件处理的核心概念,它们提供了一种机制来控制事件在DOM结构中的传播方式,对于实现复杂的交互逻辑、提高Web应用性能和用户体验至关重要。

    javaScript 事件绑定、事件冒泡、事件捕获和事件执行顺序整理总结

    总之,JavaScript的事件处理是构建动态网页的重要手段,熟练掌握事件绑定、事件冒泡、事件捕获和事件执行顺序能帮助开发者编写更高效、更易于维护的代码。通过实践和不断学习,可以更深入地理解和运用这些概念。

    【JavaScript源代码】基于事件冒泡、事件捕获和事件委托详解.docx

    在JavaScript中,事件处理是网页交互的核心部分,而事件冒泡、事件捕获和事件委托则是JavaScript事件模型中的三个重要概念。理解这三个概念对于优化网页性能和编写高效代码至关重要。 事件冒泡是指事件从最深的节点...

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

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

    事件冒泡及捕获

    事件冒泡和事件捕获是两种不同的事件处理机制,它们决定了事件如何在DOM(Document Object Model)层次结构中传播。了解这两者对于优化事件处理性能和编写高效代码至关重要。 事件冒泡是从最具体的节点(通常是DOM...

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

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

    JavaScript中捕获/阻止捕获、冒泡/阻止冒泡方法

    在JavaScript中,事件流是描述事件如何在DOM(文档...总之,理解JavaScript中的事件冒泡和事件捕获对于编写高效、可靠的事件处理代码至关重要。正确使用这些机制可以帮助我们更好地控制事件处理流程,提升用户体验。

    JS中绑定事件顺序(事件冒泡与事件捕获区别)

    JavaScript中的事件处理机制是网页交互的核心,其中包括了两种主要的事件传播模式:事件冒泡(Bubbling)和事件捕获(Cropping)。事件冒泡是指事件从最深的节点开始,然后逐级向上传播到最外层的节点。而事件捕获则...

    uni-app实现冒泡点赞功能

    4. **事件绑定与方法**:Vue.js提供了`v-on`指令用于绑定事件,我们可以为`LikeButton`组件添加点击事件监听器,如`@click="handleLike"`,并在组件内定义`handleLike`方法来处理点赞逻辑。 5. **数据响应式**:Vue...

    javascript-review-源码.rar

    - 事件冒泡与事件捕获 - 事件对象:`event`参数传递事件信息 - 阻止默认行为:`event.preventDefault()` - 事件监听器:`addEventListener`和`removeEventListener` 6. **DOM操作** - 选择元素:`...

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

    JavaScript 事件机制是网页交互的...总之,理解JavaScript事件机制,特别是捕获/冒泡和DOM事件流,对于解决移动端兼容性问题至关重要。通过使用合适的工具和策略,开发者可以创建出具有良好交互体验的跨平台网页应用。

    Javascript事件流(事件捕获、事件冒泡),事件委托(代理)

    Javascript事件流(事件捕获、事件冒泡)–&gt;事件委托(代理) Javascript与HTML之间的交互是通过“事件”实现的。事件,就是文档或浏览器窗口发生的一些特定的交互瞬间,当我们与浏览器中的web页面进行特定的交互时...

    JavaScript事件冒泡示例.html

    JavaScript事件冒泡是Web开发中的一个关键概念,它在网页交互和动态效果中扮演着重要角色。事件冒泡源于浏览器处理事件的...熟练掌握事件冒泡、事件捕获以及如何阻止冒泡,对于提升JavaScript的事件处理能力至关重要。

Global site tag (gtag.js) - Google Analytics