通常选择事件冒泡
一般地,我们都只监听冒泡阶段发生的事件,如addEventListener函数的第三个参数默认就是false,即只监听冒泡阶段的事件。
这是因为旧版本的浏览器不支持事件捕获,冒然使用事件捕获的话,兼容性不好。所以除非实在是需要使用事件捕获,一律使用默认的事件冒泡。
事件对象
在触发事件时,会产生一个事件对象event(也就是我们经常用到的那个参数,event会作为第一个参数传递给事件处理程序),这个对象中包含着所有与事件有关的信息,其中包括导致事件的元素,事件的类型以及其他与特定事件相关的信息。举个例子,鼠标操作导致的事件对应的事件对象中,会包含鼠标位置信息。所有浏览器都支持event对象,但支持方式不同。
这里介绍一下对象的属性和方法中比较常见或有用的部分:
type,String,被触发的事件类型,如click,load。
preventDefault(),如果要阻止特定事件的默认行为,可以调用这个方法。最常见的例子就是a标签链接的click事件,默认会转向指定的URL。通过调用这个方法可以阻止这个默认行为。
stopPropagation()用于立即停止事件在DOM层次中的传播,也就是取消事件的进一步捕获或者冒泡。
eventPhase,Integer,这个可以确定事件当前正位于事件流的哪一个阶段,1 2 3 分别表示捕获,目标和冒泡阶段。
IE中的事件对象(ie8以下)
访问IE中的event存在差异,IE中的event对象作为window对象的一个属性存在,也就是说我们需要使用window.event来访问事件对象。一般地,为了应对不同浏览器的差异,会这样访问事件对象。
event = event || window.event
常见或者常用的事件
load事件
load事件在资源加载完成时触发,比如window,图片等。监听window的load事件非常常见,可以确保需要的js代码在所有资源加载完成后再运行。
scroll事件
当滚动带滚动条的元素时触发。
resize事件
当元素的大小变化时触发。一般用于window上,resize可以监听window也就是浏览器窗口的变化从而触发事件。
blur事件
在元素失去焦点时触发。
focus事件
在元素获得焦点时触发。
常见的还有mousedown, keyup, keydown等等。