事件

事件:是文档或浏览器窗口中发生的一些特定的交互瞬间,是用户或浏览器自身执行的某种操作。Javascript和HTML之间的交互是通过事件来实现的。

           浏览器事件发生时不是指单单发生在一个元素上,也发生在嵌套元素上。(比如,点击一个按钮,那么按钮,body元素,html元素,document都发生了事件)

事件流:描述的是从页面中接收事件的顺序。包括事件冒泡流和事件捕获流。

               事件冒泡流:事件刚开始由具体的元素接收,然后逐级向上传播为较不具体的节点(文档)

               事件捕获流:事件最早由不具体的节点(文档)接收,最后由最具体的元素接收到事件。

DOM2级事件规定事件流包含三个阶段:事件捕获阶段,处于目标阶段(最具体的元素)和事件冒泡阶段。

事件处理程序:响应某个事件的函数,每一个元素都有自己的事件处理程序。方式如下:

         ① 使用与相应事件处理程序同名的HTML特性来指定。

          

          

           还可以调用被包含在外部文件中的函数,事件处理程序中的代码在执行时,有权访问全局作用域中的任何代码。

          该方式的优点是:1、会创建一个封装着元素属性值的函数,该函数有一个局部变量event,通过event可以访问事件对象。

          在该函数内部,this值等于事件的目标元素(即调用该事件处理程序的元素)

         

                                    2、创建这个动态的函数的扩展作用域的方式。可以像访问局部变量一样访问document及该元素本身的成员

         

           如果是表单元素,会多一个访问表单元素(父元素)的入口。这样可以访问表单的其他字段。

          

           

         ② Javascript的传统方式(DOM0级事件处理程序),即将一个函数赋值给一个事件处理程序。该事件处理程序被认为是元素的方法,所以该事件处理程序(函数)是在该元素的作用域内运行的。即this指向的是当前对象。这种方式增加的事件处理函数会在事件流的冒泡阶段被处理,或者自己将事件处理程序设置为null,btn.οnclick=null;

         ③(DOM2级事件处理程序)。使用addEventListener(  要处理的事件名,作为事件处理程序的函数,布尔值  )--添加事件处理程序和removeEventListener(  要处理的事件名,作为事件处理程序的函数,布尔值  )--删除事件处理程序。布尔值为true代表捕获阶段调用事件处理函数,为false代表冒泡阶段调用事件处理程序。所有DOM节点都包含这两个方法。好处是:可以添加多个事件处理程序,该事件处理程序也是运行于元素的作用域。

           如下的事件处理程序是按照顺序运行的。即结果是btn    结束

          

        注意:1、addEventListener()添加的事件处理程序必须通过removeEventListener()移除,且传入的参数要和addEventListener()一样。所以这里就不能用匿名函数了。

                    2、在没有特殊情况下,在冒泡阶段调用事件处理程序比较好,这样可以兼容大多数浏览器。

          

      ④ IE中的事件处理程序。使用attachEvent(  事件处理程序名称,事件处理程序函数  )--添加事件处理程序 和detachEvent(  事件处理程序名称,事件处理程序函数  )--移除事件处理程序,该事件处理程序被添加到冒泡阶段。注意:事件处理程序的名称是onclick,在全局作用域中运行,即this为window,也可以添加多个事件处理函数(但以相反的顺序被执行)。

      ⑤ 跨浏览器的事件处理程序。使用位于EventUtil对象的addHandler(  要操作的元素,事件名称,事件处理程序函数  )和removeHandler(  要操作的元素,事件名称,事件处理程序函数  )方法。

         

事件对象(event):在触发DOM上的某个事件时,会产生一个DOM对象event,这个对象中包含着所有与事件有关的信息。兼容DOM的浏览器会像事件处理程序(函数)传入(自动传入)event对象。

event对象包含与创建他的特定事件有关的属性和方法。常用的属性和方法如下:

        1. cancelable:表明是否可以取消事件的默认行为。

        2. currentTarget:存放事件处理程序的那个元素。

        3. eventPhase:调用事件处理程序的阶段,1 表示捕获节阶段   2 表示“处于目标阶段”  3 表示冒泡阶段

        4. target:事件的目标(元素)

        5. type:被触发的事件的类型

        6. preventDefault():取消事件的默认行为,如果cancelable为true则可以执行该函数

        7. stopPropagation():取消事件的进一步捕获或者冒泡,同时阻止任何处理程序被调用

        

   情况一:事件处理程序在本节点中:currentTarget、target、this的值是相同的。

       

    情况二:事件处理程序在父节点中

       

   注意:通过一个函数处理多个事件时,可以使用type属性。如下:

       

      阻止超链接的默认跳转:

       

IE中的事件对象:

        访问IE中的事件对象,取决于指定事件处理程序的方法。

        ① 使用DOM0级方法调用事件处理程序,访问event要获取window.event

        ② 使用attachEvent()或者HTML代码调用事件处理程序,会自动添加event对象至事件处理程序中。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值