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 统计时间
Mar 09 Javascript
js点击页面其它地方将某个显示的DIV隐藏
Jul 12 Javascript
html的DOM中document对象images集合用法实例
Jan 21 Javascript
js插件YprogressBar实现漂亮的进度条效果
Apr 20 Javascript
JavaScript中指定函数名称的相关方法
Jun 04 Javascript
vue-resource 拦截器使用详解
Feb 21 Javascript
简单实现js菜单栏切换效果
Mar 04 Javascript
微信小程序授权获取用户详细信息openid的实例详解
Sep 20 Javascript
初探js和简单隐藏效果的实例
Nov 23 Javascript
详解node.js 下载图片的 2 种方式
Mar 02 Javascript
微信小程序视图控件与bindtap之间的问题的解决
Apr 08 Javascript
解决一个微信号同时支持多个环境网页授权问题
Aug 07 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
文章推荐系统(三)
2006/10/09 PHP
php 信息采集程序代码
2009/03/17 PHP
PHP页面中文乱码分析
2013/10/29 PHP
兼容PHP和Java的des加密解密代码分享
2014/06/26 PHP
ThinkPHP框架实现session跨域问题的解决方法
2014/07/01 PHP
php操作MongoDB类实例
2015/06/17 PHP
PHP验证终端类型是否为手机的简单实例
2017/02/07 PHP
jquery.validate使用攻略 第二部
2010/07/01 Javascript
javascript onmouseout 解决办法
2010/07/17 Javascript
javascript中length属性的探索
2011/07/31 Javascript
JS模拟简易滚动条效果代码(附demo源码)
2016/04/05 Javascript
老生常谈遮罩层 滚动条的问题
2016/04/29 Javascript
封装的dialog插件 基于bootstrap模态对话框的简单扩展
2016/08/10 Javascript
Mui使用jquery并且使用点击跳转新窗口的实例
2017/08/19 jQuery
微信小程序图片左右摆动效果详解
2019/07/13 Javascript
jQuery轮播图功能制作方法详解
2019/12/03 jQuery
在pycharm中开发vue的方法步骤
2020/03/04 Javascript
vue跳转页面的几种方法(推荐)
2020/03/26 Javascript
微信公众号中的JSSDK接入及invalid signature等常见错误问题分析(全面解析)
2020/04/11 Javascript
python xml.etree.ElementTree遍历xml所有节点实例详解
2016/12/04 Python
python生成圆形图片的方法
2020/03/25 Python
浅析Python数据处理
2018/05/02 Python
详解python中的装饰器
2018/07/10 Python
Python使用pandas对数据进行差分运算的方法
2018/12/22 Python
Python 20行简单实现有道在线翻译的详解
2019/05/15 Python
Python3+Pycharm+PyQt5环境搭建步骤图文详解
2019/05/29 Python
为什么说Python可以实现所有的算法
2019/10/04 Python
酒店副总经理岗位职责范本
2014/02/04 职场文书
求职毕业生自荐书
2014/02/08 职场文书
民主生活会对照检查材料
2014/09/22 职场文书
合作意向协议书
2015/01/29 职场文书
搞笑老公保证书
2015/02/26 职场文书
SQL Server基本使用和简单的CRUD操作
2021/04/05 SQL Server
MySql重置root密码 --skip-grant-tables
2022/04/11 MySQL
MySQL如何修改字段类型和字段长度
2022/06/10 MySQL
教你使用RustDesk 搭建一个自己的远程桌面中继服务器
2022/08/14 Servers