JavaScript事件


事件是JavaScript与网页之间交互的桥梁,当事件触发后,可执行相应的JS代码执行相关操作。如,点击后翻页、鼠标拖动对话框、选中内容后弹出分享等等。

快速入门

事件是一种可被JavaScript侦测到的行为,包括页面加载、鼠标单击、滑过到某区域等。当JS侦测到这些行为,就会触发相应事件,之后我们再去“填空”完成想要执行的业务代码即可,完美的实现交互事件的处理。 在实现开发过程编写代码时,也并不是所有事件我们都需要用到的,我们应该根据项目需求,来绑定、监听我们所需要用到的事件即可。

事件绑定

JavaScript提供了3种绑定方式,分别为内联绑定、动态绑定和事件监听。

行内绑定

也有地方称内联绑定(一个东西,不用纠结),行内绑定是通过HTML标签属性设置实现的,如下:


	

和JS文件的行内引用同一概念,也是不推荐使用的

动态绑定

行内绑定是在HTML中通过设置标签属性方式直接行内处理的,动态绑定则解决了“分离”问题。在JS代码中,先获取到需要操作的DOM元素对象,再给其添加事件即可,如下:
html代码:


	

JavaScript代码:

var btn_click = document.getElementById('btn_click');
btn_click.onclick = function(){
	alert("顶!");
}

事件监听

为了能给同一个DOM对象,添加多个事件处理的程序,事件监听概念出现,如下:


	

	

事件监听的处理程序一般是采用 callback(回调函数) 的方式(如上)。如果采用的非匿名的有名函数,一般在使用完后,可移除事件监听。

DOM对象.removeEventListener(type, callback);

早期版本浏览器(IE6~8)事件监听语法是 :

DOM对象.attachEvent(type, callback); // 添加
DOM对象.detachEvent(type, callback); // 移除

事件对象

当发生事件时,会产生一个事件对象event,这个对象中包含着所有与该事件相关的信息,比如此事件的类型,此事件的触发元素,如鼠标事件此对象会包括鼠标的位置,键盘事件此对象会包括按键值等相关信息。

属性:

var element = document.getElementById('btn_click');
element.onclick = function(event) {
	// 此事件 类型
	console.log(event.type);  // click
	// 此事件 的操作元素
	console.log(event.target); // 

在老版本的IE浏览器(IE8及以下)中,onclick对应函数的事件对象并不是通过函数参数传入,而是需要使用window.event获取的

方法:

名称 描述
stopPropagation() 阻止事件冒泡
preventDefault() 阻止默认事件行为

事件类型

页面事件

页面事件多用于页面完成加载后,需即时执行的代码处理,如下:

事件名称 触发时机
load 当页面载入完毕后触发
unload 当页面关闭时触发

焦点事件

焦点事件多用于表单验证功能,是常用事件之一。如文本框获取焦点后改变样式,文本框失去焦点后及时验证文本框内数据等操作。如下:

事件名称 触发时机
focus 当获得焦点时触发
blur 当失去时触发

代码使用同页面事件同理,不做赘述

鼠标事件

鼠标事件应该是开发中最常见的一类事件了,如鼠标点击、滑过、拖拽等。

事件名称 触发时机
click 当按下并释放鼠标按键时触发
dblclick 当鼠标双击时触发
mouseover 当鼠标进入时触发
mouseout 当鼠标离开时触发
change 当内容发生改变时时触发,一般更多用于 select 对象

鼠标事件还有部分,如mousedown,mouseup,mousemove,mouseenter,mouseleave,mousewheel等等,要用时查下即可。

鼠标事件有一些常用的属性信息,一般是用来获取当前鼠标的位置信息,如下:

属性 描述
clientX 鼠标位于浏览器页面窗口的水平坐标
clientY 鼠标位于浏览器页面窗口的垂直坐标
pageX 鼠标位于文档的水平坐标
pageY 鼠标位于文档的垂直坐标
screenX 鼠标位于屏幕的水平坐标
screenY 鼠标位于屏幕的垂直坐标

键盘事件

当用户使用键盘进行操作时会触发相应的键盘事件,利用键盘事件可以实现一些常用的功能,如监听Enter按键进行表单的提交,监听Esc按键关闭展开的菜单等等,事件如下:

事件名称 触发时机
keydown 当按键按下时触发,长按触发多次
keyup 当释放按键弹起时触发
keypress 当按下按键时触发(Shift、CapsLock等非字符键除外)

键盘事件常用事件属性值是 event.keyCode, 按键值是ASCLL码

ASCLL码表可自行查找, a(97),A(65),Entnt(13)

表单事件

表单事件是指对WEB表单操作时发生的事件,如表单提交前对表单数据验证等操作,如下:

事件名称 触发时机
submit 当表单提交时触发
reset 当表单重置时触发

关于事件流

事件冒泡
事件捕获
DOM事件流规范

关于事件委托

同页面,大量元素需做事件处理,分别逐个添加必将占用大量资源,为优化效果,可进行事件委托处理。一般情况下,对父节点元素进行统一事件处理,之后通过事件对象的target属性进行元素判断,统一处理。