在javascript倘若有知识的三个方面。事件的第一,流程,其次,事件处理,第三,事件对象。下面就我个人的理解,,分别讲述一下这三个方面的内容。

第一、事件流

事件流指的是事件依照一定的顺序触发。它有两个顺序,各自是自上而下和自下而上。

自上而下的叫做事件捕获。事件捕获指的是事件的处理将从DOM层次的根開始,而不是从触发事件的目标元素開始,事件被从目标元素的全部祖先元素依次往下传递。在这个过程中。事件会被从文档根到事件目标元素之间各个继承派生的元素所捕获,假设事件监听器在被注冊时设置了useCapture属性为true,那么它们能够被分派给这期间的不论什么元素以对事件做出处理。否则。事件会被接着传递给派生元素路径上的下一元素。直至目标元素。

事件到达目标元素后,它会接着通过DOM节点再进行冒泡。

自下而上的叫做事件冒泡。当事件在某一DOM元素被触发时,比如用户在客户名字节点上点击鼠标,事件将尾随着该节点继承自的各个父节点冒泡穿过整个的DOM节点层次,直到它遇到依附有该事件类型处理器的节点。此时,该事件是onclick事件。

在冒泡过程中的不论什么时候都能够终止事件的冒泡。在遵从W3C标准的浏览器里能够通过调用事件对象上的stopPropagation()方法,在Internet Explorer里能够通过设置事件对象的cancelBubble属性为true。

假设不停止事件的传播。事件将一直通过DOM冒泡直至到达文档根。

第二、事件处理程序

事件处理程序就是捕获到某个事件之后运行的程序。它有三种方式。

1、html级事件处理程序,即在html标签中直接增加事件处理程序。

例如以下所看到的:

<input type="button" value="button" onclick="alert('hello word!')" />

2、dom0级事件处理程序。即把一个函数赋值给一个事件的处理程序属性。

代码例如以下:

var element=document.getElementById('button');
element.onclick=function(){
alert('hello word!');
}

3、dom2级事件处理程序,即通过调用dom对象的addEventListener( )方法注冊事件处理程序。addEventListener()方法须要三个參数,各自是事件名、事件处理程序的函数和useCapture, 一个bool类型。当为false时为冒泡获取(由里向外),true为capture方式(由外向里)。使用addEventListener方法时须要注意事件名不要加前缀“on”,通过addEventListener方法加入的事件处理程序仅仅能通过removeEventListener才干删除。通过addEventListener能够为一个dom加入多个同样的事件处理程序并按顺序运行。代码例如以下:

var element=document.getElementById('button');
element.addEventListener('click',function(){alert('hello jim!')},false);
element.addEventListener('click',function(){alert('hello jack!')},false);

在不遵循w3c标注的浏览器上并不支持addEventListener方法。比如IE8及下面版本号的IE浏览器和Opera浏览器,它们在注冊事件处理程序的时候要用到的是attachEvent方法,删除事件使用detachEvent,它们分别接收两个參数,各自是事件名和事件处理的函数。

这里要注意了。使用这两个方法的时候,事件名必须是要加上前缀“on”的,否则无法识别。

第三、事件对象。在触发dom上的事件时都会产生一个事件对象:event。

它包括了事件的类型、鼠标的坐标等。

我们能够通过event对象target属性指的触发事件的dom对象。在IE8及下面浏览器中要获取这个对象要通过srcElement这个属性来获得。

event对象中的stopPropragation方法是阻止事件冒泡,preventDefault方法阻止默认行为,在IE8及下面浏览器中要设置event.cancelBubble=true阻止事件冒泡,设置event.returnValue=false阻止默认行为。

版权声明:本文博客原创文章,博客,未经同意,不得转载。

javascript活动的更多相关文章

  1. javascript活动对象的理解——伪单例模式

    在自己研究javascript各种设计模式的过程中,偶然写出的一段代码让自己理解的更深刻了,之所以称之为伪单例模式,是因为这段代码造成的结果很想单例模式,但是实际上是活动对象捣乱所造成的误会. 代码很 ...

  2. javascript - 活动倒计时(天、时、分、秒)

    计数时: 结束时: 示例: <!DOCTYPE html> <html lang="en"> <head> <meta charset=& ...

  3. javascript面向对象——tabs实例

    面向过程—>面向对象 之前在未学习面向对象时,我们都是面向过程编程的.它的优点就是简单,明了,下面就来把面向过程的tabs切换改写成面向对象的方式. html: <div class=&q ...

  4. javascript立体学习指南

    javascript立体学习指南第一章:首先了解javascript 首先,什么是javascript? JavaStrip出生于1995年,是一种文本脚本语言,成都装修公司是一种动态的.弱类型的.基 ...

  5. javascript中函数的执行环境、作用域链、变量对象与活动对象

    javascript高级程序设计中:对执行环境.作用域链.变量对象.活动对象的解释: 1.执行环境: 执行环境:有时也叫环境:是JavaScript中最为重要的一个概念:执行环境定义了变量或函数有权访 ...

  6. JavaScript:理解执行环境、作用域链和活动对象

    作用域的原理,对JS将如何解析标识符做出了解答.而作用域的形成与执行环境和活动对象紧密相关. 我们对于JS标识符解析的判断,存在一个常见误区 首先,看一个关于JS标识符解析的问题 ,源于风雪之隅提出的 ...

  7. 图解Javascript——变量对象和活动对象

    span { line-height: 1.5 } 这是由一段代码引发的思考: var laterDeclaredVar = 'I am a global variable ...'; (functi ...

  8. 关于javascript中的变量对象和活动对象

    https://segmentfault.com/a/1190000010339180 https://zhuanlan.zhihu.com/p/26011572 https://www.cnblog ...

  9. Javascript 的执行环境(execution context)和作用域(scope)及垃圾回收

    执行环境有全局执行环境和函数执行环境之分,每次进入一个新执行环境,都会创建一个搜索变量和函数的作用域链.函数的局部环境不仅有权访问函数作用于中的变量,而且可以访问其外部环境,直到全局环境.全局执行环境 ...

随机推荐

  1. 数据结构c字符串操作语言版本

    #include<stdio.h> #include<malloc.h> #include<string.h> //结构的定义字符串 typedef struct ...

  2. oracle 12c 三学习 pdb 可插拔测试

    DECLARE l_result BOOLEAN; BEGIN l_result := DBMS_PDB.check_plug_compatibility( pdb_descr_file => ...

  3. poj 3375 Network Connection

    今天在叉姐的群里找点题目做,这题目还是很好的:提意思如下 [有M个可以提供计算机网络的端口和N台计算机(计算机数量少于端口数),每个端口和计算机有一个坐标(一维的)!其中端口与计算机链接的距离 |x  ...

  4. Directx11学习笔记【三】 第一个D3D11程序

    在先前的解决方案中新建一个新的Win32项目FirstD3D11Demo.在写代码之前,我们必须先添加dx11所需要的库.为了链接dx库,右键项目选择属性->vc++目录,在包含目录中添加你所安 ...

  5. C++ Primer 学习笔记_33_STL实践与分析(7) --容器适配器

    STL实践与分析 --容器适配器 引: 除了顺序容器.标准库还提供了三种顺序容器适配器:queue,priority_queue和stack.适配器是标准库中的概念.包含容器适配器,迭代器适配器和函数 ...

  6. 解决新版Emacs的警告:Warning (initialization): Your load-path...

    升级到新版Emacs后出现警告 作为做好用的代码编辑器之一,Emacs绝对在极客世界实用率很高.当然VIM也有很多支持者.但小编是从VIM转到Emacs的,个人觉得Emacs更好用. 小编最近升级了F ...

  7. Android五个布局

    Android五大布局Layout 1,LinearLayout 线性布局(能够嵌套使用): 制定线性布局的排列方式:水平排列 horizontal.垂直排列 vertical eg: android ...

  8. centos 彻底删除nodejs默认的安装文件

    1> yum remove nodejs npm -y 2> cd  /usr/local/lib 移除所有 node 和 node_modules目录 cd  /usr/local/in ...

  9. JAVA学习笔记 -- 包资源文件jar包裹

    初学者GUI,使用Eclipse出口jar包裹,不能显示最小化的图标集(hello.png根文件下的项目文件夹文件).码如下面: import javax.swing.JFrame; import j ...

  10. 使用hql当异常查询:Xxx is not mapped[from Xxx where ...]

    采用当今项目hql询问.出现    QingAoCenterInfo is not mapped[from QingAoCenterInfo where...] 显然地Hibernate映射关系出现了 ...