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

事件

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

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

【事件流】

事件流描述的是从页面中接收事件的顺序。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. 使用vscode对c进行调试

    最近在学习C语言.知道vscode支持对c语言的代码的调试,就想试试.然后找了教程: https://code.visualstudio.com/docs/languages/cpp http://w ...

  2. Java面试题及答案(基础122道,编码19道)

    JAVA相关基础知识1.面向对象的特征有哪些方面 1.抽象:抽象就是忽略一个主题中与当前目标无关的那些方面,以便更充分地注意与当前目标有关的方面.抽象并不打算了解全部问题,而只是选择其中的一部分,暂时 ...

  3. Wise Registry Cleaner Pro(智能注册表清理) V9.31 绿色版

    软件名称: Wise Registry Cleaner Pro(智能注册表清理)软件语言: 简体中文授权方式: 免费试用运行环境: Win7 / Vista / Win2003 / WinXP 软件大 ...

  4. 移动端audio自动播放问题

    中秋临近,心血来潮想做个手机端贺卡,以前接触的移动端较少,虽然是个简单的贺卡,其实也蛮多坑的,简略说一下在制作贺卡的过程遇到的坑: 一:移动端的屏幕大小不能算作body的大小,因为手机浏览器头部都有网 ...

  5. python 基础学习3-函数

    1. 函数参数-默认参数 python函数也可以跟C语言一样,在函数的形参中设定默认值. >>> def test(flag, port = 8080) ... print port ...

  6. SpringMVC之ModelAndView的简单使用

    可以使用ModelAndView来跳转页面和传值,具体用法如下: 构造方法的参数是要跳转的页面! 通过 ModelAndView 的对象的 AddObject(K,V)方法,可以传入数据! 获得mod ...

  7. oracle导入dmp数据库文件

    要用sys账户登录数据库,创建和dmp文件一样的表空间名称 1. 创建表空间 例如: create tablespace test(表空间名称) datafile 'F:\oracle\oradata ...

  8. SLF4J 使用简记

    SLF4J 使用简记 使用 SLF4J有一段时间了,在此作上些许记录,以作提示. 本文使用的实际实现的日志框架是 Log4j,所以使用 log4j.properties 文件 SLF4J 需要引入的j ...

  9. scp免密码传送文件

    一.单向 ssh-keygen -t rsa 单向无密码访问远程服务器操作比较简单,比如服务器A需要无密码访问服务器B(A–>B),那么只需要在服务器A生成密钥对,将生成的公钥上传到服务器B的相 ...

  10. 《Windows编程循序渐进》——MFC封装机制详解

    单文档