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 相关文章推荐
srcElement表格样式
Sep 03 Javascript
js获取php变量的实现代码
Aug 10 Javascript
js冒泡法和数组转换成字符串示例代码
Aug 14 Javascript
理解javascript中的回调函数(callback)
Sep 02 Javascript
JavaScript实现标题栏文字轮播效果代码
Oct 24 Javascript
Kendo Grid editing 自定义验证报错提示的解决方法
Nov 18 Javascript
微信小程序 定位到当前城市实现实例代码
Feb 23 Javascript
jQuery插件HighCharts绘制2D带Label的折线图效果示例【附demo源码下载】
Mar 08 Javascript
提高Node.js性能的应用技巧分享
Aug 10 Javascript
Angular2 组件间通过@Input @Output通讯示例
Aug 24 Javascript
nginx配置React静态页面的方法教程
Nov 03 Javascript
浅谈Webpack多页应用HMR卡住问题
Apr 24 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实现utf-8转unicode函数分享
2015/01/06 PHP
php使用for语句输出三角形的方法
2015/06/09 PHP
如何用javascript控制上传文件的大小
2006/10/26 Javascript
自己开发Dojo的建议框架
2008/09/24 Javascript
jQuery EasyUI API 中文文档 - Menu菜单
2011/10/03 Javascript
javascript alert乱码的解决方法
2013/11/05 Javascript
JavaScript 判断用户输入的邮箱及手机格式是否正确
2013/12/08 Javascript
jQuery 获取屏幕高度、宽度的简单实现案例
2016/05/17 Javascript
JS使用正则表达式过滤多个词语并替换为相同长度星号的方法
2016/08/03 Javascript
整理关于Bootstrap导航的慕课笔记
2017/03/29 Javascript
JS实现的模仿QQ头像资料卡显示与隐藏效果
2017/04/07 Javascript
JS常用正则表达式总结【经典】
2017/05/12 Javascript
bootstrap多层模态框滚动条消失的问题
2017/07/21 Javascript
jQuery 中msgTips 顶部弹窗效果实现代码
2017/08/14 jQuery
通过js控制时间,一秒一秒自己动的实例
2017/10/25 Javascript
微信小程序上传图片到服务器实例代码
2017/11/07 Javascript
详解原生JS动态添加和删除类
2019/03/26 Javascript
angular 实现同步验证器跨字段验证的方法
2019/04/11 Javascript
[40:01]OG vs Winstrike 2018国际邀请赛小组赛BO2 第一场 8.19
2018/08/21 DOTA
Python中用startswith()函数判断字符串开头的教程
2015/04/07 Python
对Python多线程读写文件加锁的实例详解
2019/01/14 Python
对python周期性定时器的示例详解
2019/02/19 Python
Python实用工具FuckIt.py介绍
2019/07/02 Python
Pytorch在dataloader类中设置shuffle的随机数种子方式
2020/01/14 Python
pycharm 更改创建文件默认路径的操作
2020/02/15 Python
python+selenium实现12306模拟登录的步骤
2021/01/21 Python
Html5原创俄罗斯方块(基于canvas)
2019/01/07 HTML / CSS
Html5移动端网页端适配(js+rem)
2021/02/03 HTML / CSS
铭宣海淘转运:美国、日本、英国转运等全球转运公司
2019/09/10 全球购物
求职自荐信
2013/12/14 职场文书
2013年学期结束动员演讲稿
2014/01/07 职场文书
群众路线教育实践活动调研报告
2014/11/03 职场文书
2014年建筑工程工作总结
2014/12/03 职场文书
2016年社区植树节活动总结
2016/03/16 职场文书
利用Python读取微信朋友圈的多种方法总结
2021/08/23 Python
Python测试框架pytest高阶用法全面详解
2022/06/01 Python