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 实现模态对话框 源代码大全
May 02 Javascript
js iframe跨域访问(同主域/非同主域)分别深入介绍
Jan 24 Javascript
jquery常用方法及使用示例汇总
Nov 08 Javascript
深入探讨javascript中的数据类型
Mar 04 Javascript
javascript中callee与caller的区别分析
Apr 20 Javascript
jQuery超简单选项卡完整实例
Sep 26 Javascript
浅谈JavaScript 数据属性和访问器属性
Sep 01 Javascript
JS实现无缝循环marquee滚动效果
May 22 Javascript
vue移动端UI框架实现QQ侧边菜单组件
Mar 09 Javascript
基于vue.js实现的分页
Mar 13 Javascript
浅谈Fetch 数据交互方式
Dec 20 Javascript
浅析 Vue 3.0 的组装式 API(一)
Aug 31 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提交后跳转
2013/06/23 PHP
PHP实现时间比较和时间差计算的方法示例
2017/07/24 PHP
js各种验证文本框输入格式(正则表达式)
2010/10/22 Javascript
JQuery插件fancybox无法在弹出层使用左右键的解决办法
2013/12/25 Javascript
JavaScript获取当前页面上的指定对象示例代码
2014/02/28 Javascript
使用typeof方法判断undefined类型
2014/09/09 Javascript
js使用心得分享
2015/01/13 Javascript
jquery验证邮箱格式并显示提交按钮
2015/11/07 Javascript
详解支持Angular 2的表格控件
2017/01/19 Javascript
JavaScript实现前端分页控件
2017/04/19 Javascript
js学使用setTimeout实现轮循动画
2017/07/17 Javascript
关于Promise 异步编程的实例讲解
2017/09/01 Javascript
Angular实现下载安装包的功能代码分享
2017/09/05 Javascript
vue2.0 better-scroll 实现移动端滑动的示例代码
2018/01/25 Javascript
Vue打包后访问静态资源路径问题
2019/11/08 Javascript
浅谈webpack构建工具配置和常用插件总结
2020/05/11 Javascript
python实现百度关键词排名查询
2014/03/30 Python
用Python的线程来解决生产者消费问题的示例
2015/04/02 Python
pandas实现选取特定索引的行
2018/04/20 Python
python使用RNN实现文本分类
2018/05/24 Python
Python实现的对本地host127.0.0.1主机进行扫描端口功能示例
2019/02/15 Python
在Qt中正确的设置窗体的背景图片的几种方法总结
2019/06/19 Python
详解Matplotlib绘图之属性设置
2019/08/23 Python
快速解决docker-py api版本不兼容的问题
2019/08/30 Python
python3 实现口罩抽签的功能
2020/03/11 Python
手把手教你如何用Pycharm2020.1.1配置远程连接的详细步骤
2020/08/07 Python
HTML5 中新的全局属性(整理)
2013/07/31 HTML / CSS
俄罗斯天然和有机产品、健康生活网上商店:Fitomarket.ru
2020/10/09 全球购物
中间件分为哪几类
2012/03/14 面试题
财务经理岗位职责
2013/11/09 职场文书
新品发布会策划方案
2014/06/08 职场文书
公司董事长岗位职责
2014/06/08 职场文书
火烧圆明园观后感
2015/06/03 职场文书
个人收入证明格式
2015/06/24 职场文书
Redis延迟队列和分布式延迟队列的简答实现
2021/05/13 Redis
Vue.js中v-bind指令的用法介绍
2022/03/13 Vue.js