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 相关文章推荐
javascript代码编写需要注意的7个小细节小结
Sep 21 Javascript
js中关于一个分号的崩溃示例
Nov 11 Javascript
Javascript基础教程之数组 array
Jan 18 Javascript
js父页面中使用子页面的方法
Jan 09 Javascript
jQuery在ie6下无法设置select选中的解决方法详解
Sep 20 Javascript
JavaScript表单即时验证 验证不成功不能提交
Aug 31 Javascript
基于Vue2.X的路由和钩子函数详解
Feb 09 Javascript
vue 路由页面之间实现用手指进行滑动的方法
Feb 23 Javascript
angularjs使用gulp-uglify压缩后执行报错的解决方法
Mar 07 Javascript
原生JS实现获取及修改CSS样式的方法
Sep 04 Javascript
Vue实现table上下移动功能示例
Feb 21 Javascript
Vue动态修改网页标题的方法及遇到问题
Jun 09 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创建PDF中文文档
2006/10/09 PHP
php实现的ping端口函数实例
2014/11/12 PHP
php列出mysql表所有行和列的方法
2015/03/13 PHP
浅谈PHP中JSON数据操作
2015/07/01 PHP
PHP文件上传、客户端和服务器端加限制、抓取错误信息、完整步骤解析
2017/01/12 PHP
在textarea文本域中显示HTML代码的方法
2007/03/06 Javascript
js中方法重载如何实现?以及函数的参数问题
2013/08/01 Javascript
js判断选择时间不能小于当前时间的示例代码
2013/09/24 Javascript
一款由jquery实现的整屏切换特效
2014/09/15 Javascript
Javascript实现颜色rgb与16进制转换的方法
2015/04/18 Javascript
js实现仿爱微网两级导航菜单效果代码
2015/08/31 Javascript
Bootstrap中的Panel和Table全面解析
2016/06/13 Javascript
jQuery中Find选择器用法示例
2016/09/21 Javascript
AngularJs+Bootstrap实现漂亮的计算器
2017/08/10 Javascript
Angular js 实现添加用户、修改密码、敏感字、下拉菜单的综合操作方法
2017/10/24 Javascript
React Native 搭建开发环境的方法步骤
2017/10/30 Javascript
vue单页应用加百度统计代码(亲测有效)
2018/01/31 Javascript
Angular动态绑定样式及改变UI框架样式的方法小结
2018/09/03 Javascript
使用 Element UI Table 的 slot-scope方法
2019/10/10 Javascript
浅析vue-router实现原理及两种模式
2020/02/11 Javascript
JavaScript中CreateTextFile函数
2020/08/30 Javascript
python连接MySQL、MongoDB、Redis、memcache等数据库的方法
2013/11/15 Python
最基础的Python的socket编程入门教程
2015/04/23 Python
搞笑的程序猿:看看你是哪种Python程序员
2015/06/12 Python
如何利用Anaconda配置简单的Python环境
2019/06/24 Python
护士的岗位职责
2013/12/04 职场文书
校园十佳歌手策划书
2014/01/22 职场文书
共产党员承诺书
2014/03/25 职场文书
竞选班长的演讲稿
2014/04/24 职场文书
考生诚信考试承诺书
2014/05/23 职场文书
会计试用期自我评价怎么写
2014/09/18 职场文书
教师听课评语大全
2014/12/31 职场文书
大学生操行评语大全
2014/12/31 职场文书
纪律委员竞选稿
2015/11/19 职场文书
JavaScript模拟实现网易云轮播效果
2022/04/04 Javascript
解决vue中provide inject的响应式监听
2022/04/19 Vue.js