---恢复内容开始---

事件

好不容易回到正轨,好好学习,天天向上。今天写的是事件,感觉内容蛮多的,所以分了两篇写,主要写了事件流、事件处理程序、事件对象。恩,明天还会再有一篇,哈哈哈。我努力的!我要去做老师布置的作业了,不然没有平时分,很惨的。

事件就是文档或浏览器窗口发生的一些特定的交互瞬间。

【事件流】

事件流描述的是从页面中接收事件的顺序。IE的事件流就就是事件冒泡流,而Nestcape开发团队的事件流是事件捕获流。

事件冒泡

IE的事件流叫事件冒泡,即事件开始时由最具体的元素(文档中嵌套层次最深的那个节点)接收,然后逐级向上传播到较为不具体的节点。

所有现代浏览器都支持事件冒泡,但在具体实现上还是有一些差别。

事件捕获

事件捕获的思想是不太具体的节点应该更早接收事件,而最具体的节点应该最后接收到事件。

事件捕获是Netscape Communicator 唯一支持的事件流模型。

DOM事件流

“DOM2级事件”规定的事件流包括三个阶段:事件捕获阶段、处于目标阶段和事件冒泡阶段。

在DOM事件流中,实际的目标(<div>元素)在捕获阶段不会接收到事件。

【事件处理程序】

事件就是用户或浏览器自身执行的某些动作。而响应某个事件的函数就叫做事件处理程序,事件处理程序的名字以“on”开头。

事件处理程序中的代码在执行时,有权访问全局作用域中的任何代码。

在HTML中指定事件处理程序有两个缺点:

一是存在一个时差问题。二是这样扩展事件处理程序的作用域链在不浏览器中会导致不同的结果。

DOM0级事件处理程序

使用DOM0级方法指定的事件处理程序被认为时候元素的方法。因此,这个时候的事件处理程序是在元素的作用域中运行。换句话说,程序中的this引用当前元素。如下:

var btn=document.getElementById("myBtn");
btn.onclick=function(){
alert("this.id"); //"myBtn"
};

也可以删除通过DOM0级方法指定的事件处理程序,只要将事件处理程序设置为null之后,再单击按钮将不会有任何动作发生。

DOM2级事件处理程序

定义了两个方法,用于处理指定(addEventListener())和删除(removeEventListener())事件处理程序的操作。都接受要处理的事件名、作为事件处理程序的函数和一个布尔值。最后这个布尔值的参数如果是true,表示在捕获阶段调用事件处理程序;如果是false,表示在冒泡阶段调用事件处理程序。如下:

var btn=document.getElementById("myBtn");
btn.addEventListener("click",function(){
alert(this.id);
},false);

IE事件处理程序

IE实现了与DOM中类似的两个方法:attachEvent()和detachEvent()。这两个方法接受相同的两个参数:事件处理程序名称和事件处理程序函数。通过attachEvent()添加的事件处理程序都会被添加到冒泡阶段。

var btn=document.getElementById("myBtn");
btn.attachEvent("onclick",function(){
alert("Clicked");
});

attachEvent()的第一个参数是"onclick",而且在IE中使用attachEvent()与使用DOM0级方法的主要区别在于事件处理程序的作用域。在DOM0 级方法情况下,事件处理程序会在其所属元素的作用域中运行;在使用attachEvent()方法的情况下,事件处理程序会在全局作用域中运行,因此this等于window。

【事件对象】

在触发DOM上的某一个事件时,会产生一个事件对象event,这个对象中包含所有与事件有关的信息。包括导致事件的元素、事件类型以及与其他特定事件相关的信息。

DOM0中的事件对象:兼容DOM的浏览器会将一个event对象传入到事件处理程序中。无论指定事件处理程序时使用什么方法,都会传入event对象。

IE中的事件对象:在使用DOM0级方法添加事件处理程序时,event对象作为window对象的一个属性存在。如果是通过HTML特性指定事件处理程序,那么还可以通过一个名叫event的变量来访问event对象(与DOM中的事件模型相同)。因为事件处理程序的作用域是根据它的方式来确定的,所以不能认为this会始终等于事件目标。所以,最好还是使用event.srcElement比较保险。

跨浏览器的事件对象:给EventUtil对象添加方法来实现获取对象的信息,getEvent()返回对event对象的引用;getTarget()方法用于返回事件的目标;preventDefault()方法用于取消事件的默认行为;stopPropagation()方法首先尝试使用DOM方法阻止事件流,否则就使用cancelBubble属性,由于IE不支持事件捕获,这个方法在跨浏览器情况下,也能用来阻止事件冒泡。

---恢复内容结束---

JavaScript(6)——事件1.0的更多相关文章

  1. jQuery $(document).ready()和JavaScript onload事件

    jQuery $(document).ready()和JavaScript onload事件 Why we need a right time? 对元素的操作和事件的绑定需要等待一个合适的时机,可以看 ...

  2. Javascript事件模型系列(四)我所理解的javascript自定义事件

    被我拖延了将近一个月的javascript事件模型系列终于迎来了第四篇,也是我计划中的最后一篇,说来太惭愧了,本来计划一到两个星期写完的,谁知中间遇到了很多事情,公司的个人的,搞的自己心烦意乱浮躁了一 ...

  3. javascript通用事件封装

    随着最近几年Html5的兴起,越来越多的应用采用html5进行实现,一个优秀的网页应用不但需要美观简洁的UI界面,更需要一个良好的交互.网页应用大部分的交互需要用javascript事件进行实现.虽然 ...

  4. JavaScript中事件绑定的方法总结

    最近收集了一些关于JavaScript绑定事件的方法,汇总了一下,不全面,但是,希望便于以后自己查看. JavaScript中绑定事件的方法主要有三种: 1 在DOM元素中直接绑定 2 JavaScr ...

  5. JavaScript的事件监听、捕获和冒泡

    在前端开发中,我们经常需要对某些事件进行监听.这样只要在指定的元素上触发了该事件,就会执行一个回调函数来进行相关的操作. 而JavaScript中事件监听的方法总共有三种,分别如下: element. ...

  6. javascript之事件绑定

    曾经写过一篇随笔,attachEvent和addEventListener,跟本文内容有很多相似之处 本文链接:javascript之事件绑定 1.原始写法 <div onclick=" ...

  7. JavaScript键盘事件全面控制代码

    JavaScript键盘事件全面控制,它可以捕获键盘事件的输入状态,可以判断你敲打了键盘的那个键,ctrl.shift,26个字母等等,返回具体键盘值. <html> <head&g ...

  8. Javascript知识——事件

    O(∩_∩)O~~又是新的一周开始了,今天还是在继续学习Javascript知识,今天主要讲了事件的知识.现在就总结下吧. 事件 事件一般是用于浏览器和用户操作进行交互.最早是 IE 和 Netsca ...

  9. 理解的javascript自定义事件

    理解的javascript自定义事件 被我拖延了将近一个月的javascript事件模型系列终于迎来了第四篇,也是我计划中的最后一篇,说来太惭愧了,本来计划一到两个星期写完的,谁知中间遇到了很多事情, ...

  10. 走进javascript——DOM事件

    DOM事件模型 在0级DOM事件模型中,它只是简单的执行你为它绑定的事件,比如你为某个元素添加了一个onclick事件,当事件触发时,它只是去调用我们绑定的那个方法,不再做其他的操作. 在2级DOM事 ...

随机推荐

  1. NSDateComponents

    NSDateComponents将时间表示成适合人类阅读和使用的方式, 首先要遵循某种历法 NSCalendar * cal = [NSCalendar currentCalendar]; 有三种用法 ...

  2. 手动安装VS code 插件

    现在安装包: 通过修改下面的地址参数:https://${publisher}.gallery.vsassets.io/_apis/public/gallery/publisher/${publish ...

  3. linux + shell 命令等

    Linux命令[注意:建议用UltraEdit打开] 一.文件处理命令 1.命令格式与目录处理命令 ls –a[查看隐藏文件] ls –l[查看文件信息长格式显示] ls –d[查看指定目录的详细信息 ...

  4. SQL 查询优化 索引优化

    sql语句优化 性能不理想的系统中除了一部分是因为应用程序的负载确实超过了服务器的实际处理能力外,更多的是因为系统存在大量的SQL语句需要优化. 为了获得稳定的执行性能,SQL语句越简单越好.对复杂的 ...

  5. oracle 删除当前用户下所有的表、索引、序列...

    select 'drop table "' || table_name ||'";'||chr(13)||chr(10) from user_tables;  --delete t ...

  6. 《JavaScript高级程序设计》读书笔记 ---RegExp 类型

    ECMAScript 通过RegExp 类型来支持正则表达式.使用下面类似Perl 的语法,就可以创建一个正则表达式.var expression = / pattern / flags ; 其中的模 ...

  7. css后续属性

  8. wordpress建站过程5——footer.php

    footer中写的就只有网站地图,公司信息等等简单东西而已: <?php wp_footer(); ?> <div class="footer"> < ...

  9. 添加JUnit到Java Build Path

    1.第一种 新建项目,点击右键,选择properties->Java Build Path->Libraries->add library->JUnit->JUnit4- ...

  10. java中的词汇

    java中的词汇: 空白符:空格,制表符,换行符.他们的存在使得代码变得很美观. 标识符:由大小写字母,数字,下划线,美元符号组成.且数字不能用于标识符第一个字符. 字面值:变量的值通常使用表示常量的 ...