JavaScript事件用法浅析


Posted in Javascript onOctober 31, 2016

本文实例讲述了JavaScript事件用法。分享给大家供大家参考,具体如下:

JavaScript通过事件与HTML交互。

事件流

事件流规定了事件的触发规则和顺序。DOM2规定了事件流包括三个阶段:事件捕获 -> 目标触发除 -> 事件冒泡。DOM2规定在事件捕获阶段不应调用事件处理程序,不过各大浏览器都不鸟它。DOM2级的事件处理程序操作函数对:addEventListener和removeEventListener的第三个参数则把这种事变成了DIY,这是一种妥协,同时让初学者认为dom的管理一片混乱。

var btn = document.getElementById("btn");
btn.addEventListener("click",function(){alert(this.id);},false);
document.body.addEventListener("click",function(){alert("body");},false);

更新上述js中addEventListener和removeEventListener中的第三个参数为true,对比为false时的效果,便大约能理解事件流了。

事件

事件是用户或浏览器自身执行的某和动作。

事件处理程序的添加方式

响应事件的函数称为事件处理程序。

指定事件处理程序有以下方式:

HTML特性指定。

如果某个元素支持某个事件,那么就有一个对应的HTML特性,用此特性就可以给其添加事件处理程序 。

<button id="btn" onclick="alert('button click')">button</button>

DOM0级。 将一个函数赋值给一个元素的事件处理程序属性:这是使用js指定事件生理程序的传统方式,至今仍被使用。

var btn = document.getElementById("btn");
btn.onmouseover = function(){
 this.innerHTML="按钮";
};

DOM2级。

通过addEventListener和removeEventListener来管理元素的事件。所有DOM节点都包含这两个方法,它们都包含三个参数,以add为例:

addEventListener(事件名,事件处理函数,是否在事件捕获时执行事件处理程序)

var btn = document.getElementById("btn");
btn.addEventListener("click",function(){alert(this.id);},true);
//注意下面的remove,它完全没有用,这两个匿名函数实际上是不同的对象
btn.removeEventListener("click",function(){alert(this.id);},true);

在上面代码中,指向同一对象的引用被认为是相同的,同样的申明生成的是两个外表相同但是存储在堆上两个不同位置的不同对象。

事件对象

DOM上的事件被触发时,会生成一个事件对象event。无论指定了什么事件处理程序都会传入event对象:准确的地说,event对象是在调用执行函数的执行环境中创建的,根据作用域链的定义,可知它是如何传入的。

var btn = document.getElementById("btn");
var btnClick = function(){
 alert(event.type);
}
btn.onclick = btnClick;//点击btn按钮时,弹出msg:click

event包含丰富的成员,用来控制访问事件,下面是所有事件的共有成员。

target:触发事件的动作直接作用的目标元素。
currentTarget:等于this,事件处理程序作用于的元素。
eventPhase:调用事件处理程序时,所处的事件流中的阶段。1,2,3 三个值分别对应事件流三阶段。
type:事件类型。单击事件对应 String: "click"。

事件类型

事件类型分为以下几类:

UI事件。
焦点事件。
鼠标与滚轮事件。
键盘与文本事件。
复合事件。
变动事件。
HTML5事件。
设备事件。
触摸与手势事件。

PS:关于javascript事件的详细说明可参考本站在线工具:

javascript事件与功能说明大全:
http://tools.3water.com/table/javascript_event

希望本文所述对大家JavaScript程序设计有所帮助。

Javascript 相关文章推荐
jquery.validate的使用说明介绍
Nov 12 Javascript
jQuery Form 页面表单提交的小例子
Nov 15 Javascript
运用js教你轻松制作html音乐播放器
Apr 17 Javascript
详解vuelidate 对于vueJs2.0的验证解决方案
Mar 09 Javascript
jQuery插件FusionWidgets实现的Cylinder图效果示例【附demo源码】
Mar 23 jQuery
基于Node的React图片上传组件实现实例代码
May 10 Javascript
JSON在Javascript中的使用(eval和JSON.parse的区别)详细解析
Sep 05 Javascript
详解使用React.memo()来优化函数组件的性能
Mar 19 Javascript
详解mpvue实现对苹果X安全区域的适配
Jul 31 Javascript
简单了解JavaScript arguement原理及作用
May 28 Javascript
js实现直播点击飘心效果
Aug 19 Javascript
解决vue中使用less/sass及使用中遇到无效的问题
Oct 24 Javascript
js中通过getElementsByName访问name集合对象的方法
Oct 31 #Javascript
JavaScript递归操作实例浅析
Oct 31 #Javascript
在html中引入外部js文件,并调用带参函数的方法
Oct 31 #Javascript
Validform表单验证总结篇
Oct 31 #Javascript
Javascript数组中push方法用法分析
Oct 31 #Javascript
JavaScript中的await/async的作用和用法
Oct 31 #Javascript
使用 jQuery.ajax 上传带文件的表单遇到的问题
Oct 31 #Javascript
You might like
预告映像公开!第1章续篇剧场版动画《Princess Principal Crown Handler》4月10日上映!
2020/03/06 日漫
php 禁止页面缓存输出
2009/01/07 PHP
php加密解密实用类分享
2014/01/07 PHP
如何在旧的PHP系统中使用PHP 5.3之后的库
2015/12/02 PHP
Yii隐藏URL中index.php的方法
2016/07/12 PHP
php加速缓存器opcache,apc,xcache,eAccelerator原理与配置方法实例分析
2020/03/02 PHP
thinkphp5.1 框架钩子和行为用法实例分析
2020/05/25 PHP
JS宝典学习笔记(下)
2007/01/10 Javascript
基于jquery的时间段实现代码
2012/08/02 Javascript
Jquery选择子控件&quot;大于号&quot;和&quot; &quot;区别介绍及使用示例
2013/06/25 Javascript
js调用图片隐藏&amp;显示实现代码
2013/09/13 Javascript
JS使用JSON作为参数实例分析
2016/06/23 Javascript
jQuery常见的选择器及用法介绍
2016/12/20 Javascript
详解angularJs中关于ng-class的三种使用方式说明
2017/06/02 Javascript
详细分析JS函数去抖和节流
2017/12/05 Javascript
弱类型语言javascript开发中的一些坑实例小结【变量、函数、数组、对象、作用域等】
2019/08/07 Javascript
微信小程序连接服务器展示MQTT数据信息的实现
2020/07/14 Javascript
[48:44]2014 DOTA2国际邀请赛中国区预选赛5.21 TongFu VS HGT
2014/05/22 DOTA
python获取标准北京时间的方法
2015/03/24 Python
MySQL最常见的操作语句小结
2015/05/07 Python
Python常用的内置序列结构(列表、元组、字典)学习笔记
2016/07/08 Python
简单谈谈Python中的闭包
2016/11/30 Python
python3使用PyMysql连接mysql数据库实例
2017/02/07 Python
解决pycharm同一目录下无法import其他文件
2020/02/12 Python
Tensorflow训练MNIST手写数字识别模型
2020/02/13 Python
pytorch ImageFolder的覆写实例
2020/02/20 Python
python 穷举指定长度的密码例子
2020/04/02 Python
Python基于进程池实现多进程过程解析
2020/04/30 Python
selenium判断元素是否存在的两种方法小结
2020/12/07 Python
英国领先的大码时装品牌之一:Elvi
2018/08/26 全球购物
食品安全宣传标语
2014/06/07 职场文书
2014年教师党员自我评议
2014/09/19 职场文书
教师政风行风评议心得体会
2014/10/21 职场文书
毕业典礼致辞
2015/07/29 职场文书
创业计划书之o2o水果店
2019/08/30 职场文书
使用CSS实现百叶窗效果示例代码
2023/05/07 HTML / CSS