javascript事件模型介绍


Posted in Javascript onMay 31, 2016

一、原始事件模型

其事件类型:分为"输入事件(如onclicki)"和"语义事件(如onsubmit)"

事件程序的注册可以以下几种方式:

1、JS代码作为HTML性质值

<input type="button" value="Press me" onclick="alert('thanks');"

2、事件处理程序作为JS属性

附注:文档中的每个HTML元素在文档树中都有一个相应的JS对象,这个JS对象的属性对应于那个HTML元素的性质,无论作为HTML性质的JS代码还是作为JS属性的时间处理程序,其本身的属性都是函数"function".

<form name="f1">

<input name="b1" type="button" value="Press Me"/>

</form>

第一种赋值方式:

document.f1.b1.onclick=function(){alert('thanks');};

第二种赋值方式:

function plead(){window.status="Please Press Me!";}

document.f1.bi.onmouseover=plead;

作为JS属性的事件处理程序可以用JS属性显式调用

document.myfrom.onsubmit();

事件处理程序可以返回fale来阻止浏览器执行事件的默认动作,常用的如对onsubmit的操作。例外是
对超链接mouseover的window.status显示事件的阻挡,是返回true.例如:

<a href="help.htm" onmouseover="window.status='help';return true;">help</a>

二、DOM2事件模型

这个模型参考了IE的气泡模型而制定的,它是由w3c制定的规范.在原始模型中事件一旦发生就直接调用事件句柄,没有其它的事件传播过程.而在DOM2模型中事件有一个特殊的传播过程,分为三个阶段:

(1)capturing phase:事件被从document一直向下传播到目标元素,在这过程中如果有哪个祖先元素对该事件感兴趣可以注册自己的处理函数.

(2)target phase:事件到达目标元素,执行目标元素的事件处理函数.

(3)bubbling phase:事件从目标元素上升一直到达document,虽然所有的事件类型都会经历captruing phase阶段但是只有部分事件会经历bubbling phase阶段,例如submit事件就不会被上浮.
在整个的事件传播过程中可以调用event.stopPropagation()来停止事件的传播,调用preventDefault()来阻止浏览器的默认行为.

addEventListener("eventType","handler","true!false");

removeEventListner("eventType","handler","true!false");

三、IE模型

IE模型也提供了一个event对象封装了事件的详细信息,但是IE不把该对象传入事件处理函数,由于在任意时刻只会存在一个事件,所以IE把它作为全局对象window的一个属性,IE中的事件传播模式对应于DOM2的第二和第三阶段,首先执目标元素的处理函数,然后向上传播到达document,ie中只能能捕捉鼠标事件,而DOM2中可以捕捉所有的事件,IE中注册和删除事件处理函数的方法也不同于DOM2.

事件处理函数的注册和删除是通过元素的attachEvent("eventType","handler") and detachEvent("eventType","handler" ),与dom2不同的是eventType有on前缀

特点:
1、传播过程只起泡,不捕捉。起泡中断方法:
window.ecent.cancelBubble=true;
2、Event对象不是事件处理程序的函数参数,而是window的全局变量。
3、事件注册函数:attachEvent()和反注册:detachEvent().  

四、Netscape4事件模型

由于Netscape好像已经完全停止开发,所以就不详述了,简单的说:就是只捕捉不起泡。

以上就是javascript事件模型基本的介绍,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
JS实现图片翻书效果示例代码
Sep 09 Javascript
Jquery遍历checkbox获取选中项value值的方法
Feb 13 Javascript
JavaScript基于setTimeout实现计数的方法
May 08 Javascript
jQuery formValidator表单验证
Jan 07 Javascript
jQuery针对input的class属性写了多个值情况下的选择方法
Jun 03 Javascript
JavaScript组成、引入、输出、运算符基础知识讲解
Dec 08 Javascript
详解handlebars+require基本使用方法
Dec 21 Javascript
微信小程序如何获取openid及用户信息
Jan 26 Javascript
JQuery animate动画应用示例
May 14 jQuery
webpack实践之DLLPlugin 和 DLLReferencePlugin的使用教程
Jun 10 Javascript
微信小程序实现批量倒计时功能
Nov 01 Javascript
Weex开发之WEEX-EROS开发踩坑(小结)
Oct 16 Javascript
使用JavaScript实现弹出层效果的简单实例
May 31 #Javascript
javascript事件处理模型实例说明
May 31 #Javascript
jQuery基础知识点总结(必看)
May 31 #Javascript
浅谈JavaScript中小数和大整数的精度丢失
May 31 #Javascript
javascript小数精度丢失的完美解决方法
May 31 #Javascript
javascript解决小数的加减乘除精度丢失的方案
May 31 #Javascript
javascript基本语法
May 31 #Javascript
You might like
PHP使用Mysqli类库实现完美分页效果的方法
2016/04/07 PHP
YII2框架中使用yii.js实现的post请求
2017/04/09 PHP
php创建类并调用的实例方法
2019/09/25 PHP
Yii redis集合的基本使用教程
2020/06/14 PHP
laravel数据库查询结果自动转数组修改实例
2021/02/27 PHP
面向对象的编程思想在javascript中的运用上部
2009/11/20 Javascript
jQuery 淡入淡出 png图在ie8下有黑色边框的解决方法
2013/03/05 Javascript
jquery中获取id值方法小结
2013/09/22 Javascript
jQuery获得页面元素的绝对/相对位置即绝对X,Y坐标
2014/03/06 Javascript
jQuery Mobile动态刷新页面样式的实现方法
2016/05/28 Javascript
关于JS 预解释的相关理解
2016/06/28 Javascript
老生常谈combobox和combotree模糊查询
2017/04/17 Javascript
解读vue生成的文件目录结构及说明
2017/11/27 Javascript
Angular利用trackBy提升性能的方法
2018/01/26 Javascript
微信小程序日期时间选择器使用方法
2018/02/01 Javascript
jQuery+datatables插件实现ajax加载数据与增删改查功能示例
2018/04/17 jQuery
vue-router 源码之实现一个简单的 vue-router
2018/07/02 Javascript
关于小程序优化的一些建议(小结)
2020/12/10 Javascript
vue动态设置路由权限的主要思路
2021/01/13 Vue.js
Python列出一个文件夹及其子目录的所有文件
2016/06/30 Python
Python-OpenCV基本操作方法详解
2018/04/02 Python
每天迁移MySQL历史数据到历史库Python脚本
2018/04/13 Python
用pandas中的DataFrame时选取行或列的方法
2018/07/11 Python
Python Scapy随心所欲研究TCP协议栈
2018/11/20 Python
使用pandas实现连续数据的离散化处理方式(分箱操作)
2019/11/22 Python
python简单的三元一次方程求解实例
2020/04/02 Python
调整Jupyter notebook的启动目录操作
2020/04/10 Python
Europcar比利时:租车
2019/08/26 全球购物
Android面试题附答案
2014/12/08 面试题
告诉你怎样写创业计划书
2014/01/27 职场文书
函授毕业个人自我评价
2014/02/20 职场文书
公务员考察材料
2014/12/23 职场文书
2015年车间管理工作总结
2015/07/23 职场文书
Python中threading库实现线程锁与释放锁
2021/05/17 Python
Python 读写 Matlab Mat 格式数据的操作
2021/05/19 Python
python tkinter Entry控件的焦点移动操作
2021/05/22 Python