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实现网页上的浮动广告的简单方法
Jun 14 Javascript
jQuery 追加元素的方法如append、prepend、before
Jan 16 Javascript
node.js中的path.dirname方法使用说明
Dec 09 Javascript
JavaScript获取表格(table)当前行的值、删除行、增加行
Jul 03 Javascript
使用Web Uploader实现多文件上传
Jun 08 Javascript
[Bootstrap-插件使用]Jcrop+fileinput组合实现头像上传功能实例代码
Dec 20 Javascript
bootstrap jquery dataTable 异步ajax刷新表格数据的实现方法
Feb 10 Javascript
浅谈js中的this问题
Aug 31 Javascript
AngularJS2 与 D3.js集成实现自定义可视化的方法
Dec 01 Javascript
Angular 组件之间的交互的示例代码
Mar 24 Javascript
小程序中canvas的drawImage方法参数使用详解
Jul 04 Javascript
vue使用keep-alive实现组件切换时保存原组件数据方法
Oct 30 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 无限极分类
2008/03/27 PHP
php利用cookies实现购物车的方法
2014/12/10 PHP
php提示Warning:mysql_fetch_array() expects的解决方法
2014/12/16 PHP
php遍历目录方法小结
2015/03/10 PHP
php生成gif动画的方法
2015/11/05 PHP
jQuery源码分析之Event事件分析
2010/06/07 Javascript
js出生日期 年月日级联菜单示例代码
2014/01/10 Javascript
AngularJs Managing Service Dependencies详解
2016/09/02 Javascript
微信小程序 引入es6 promise
2017/04/12 Javascript
JS实现用特殊符号替换字符串的中间部分区域的实例代码
2018/07/24 Javascript
AngularJS 事件发布机制
2018/08/28 Javascript
jQuery实现获取及设置CSS样式操作详解
2018/09/05 jQuery
[00:10]DOTA2全国高校联赛 以DOTA2会友
2018/05/30 DOTA
[55:23]VGJ.T vs Winstrike 2018国际邀请赛小组赛BO2 第二场 8.17
2018/08/20 DOTA
[51:10]VP vs VGJ.S 2018国际邀请赛小组赛BO2 第二场 8.19
2018/08/21 DOTA
python实现中文转换url编码的方法
2016/06/14 Python
python的文件操作方法汇总
2017/11/10 Python
Python实现的多线程同步与互斥锁功能示例
2017/11/30 Python
深入理解Python爬虫代理池服务
2018/02/28 Python
谈谈python中GUI的选择
2018/03/01 Python
Python使用matplotlib绘制随机漫步图
2018/08/27 Python
python requests post多层字典的方法
2018/12/27 Python
Python中常用的8种字符串操作方法
2019/05/06 Python
用python介绍4种常用的单链表翻转的方法小结
2020/02/24 Python
Python lambda表达式原理及用法解析
2020/08/18 Python
Django Form常用功能及代码示例
2020/10/13 Python
巧用 CSS3的webkit-box-reflect 倒影实现各类动效
2021/03/05 HTML / CSS
英国儿童设计师服装的领先零售商:Base
2019/03/17 全球购物
Whistles官网:英国女装品牌
2020/08/14 全球购物
财务信息服务专业自荐书范文
2014/02/08 职场文书
作风建设年活动总结
2014/08/27 职场文书
离职报告范文
2014/11/04 职场文书
营运督导岗位职责
2015/04/10 职场文书
浅谈pytorch中的dropout的概率p
2021/05/27 Python
python 爬取华为应用市场评论
2021/05/29 Python
《现实主义勇者的王国再建记》第三弹OST全曲试听片段公开
2022/04/04 日漫