原生JavaScript的事件类型
Web浏览器中可能发生的事件有很多类型,下面是几种常用的事件类型:
UI事件:焦点事件,鼠标与滚轮事件,键盘与文本事件,复合事件变动事件,HTML5事件设备事件,触摸与手势事件。
第一部分:UI事件
UI事件中主要包括load,unload,abort,error,select,resize,scroll事件。
1.load事件
此事件为当页面完全加载完之后(包括所有的图像、js文件、css文件等外部资源),就会触发window上面的load事件。
这个事件是JavaScript中最常用的事件,比如我们经常会使用window.onload=function(){};这种形式,即当页面完全加载完之后执行其中的函数。
2.unload事件
显然,这个事件是与load事件相对的。在文档被完全卸载后触发。用户从一个页面切换到另一个页面就会触发unload时间。利用这个事件最多的情况是清楚引用,避免内存泄漏。
这个事件同样有两种方式来指定。一种是JavaScript方式,使用EventUtil.addHandler();另一种就是在body元素中添加一个特性。
值得注意的是,一定要小心编写onload事件中的代码,因为它是在页面卸载后才触发,所以说页面加载后存在的那些对象,在onload触发之后就不一定存在了!
3.resize事件
当调整浏览器的窗口到一个新的宽度或高度时,就会触发resize事件。这个事件在window(窗口)上面触发。因此同样可以通过JS或者body元素中的onresize特性来指定处理程序。
4.scroll事件
这个事件会在文档被滚动期间重复被触发,所以应当尽量保持事件处理程序的代码简单。
第二部分:焦点事件
焦点事件会在页面元素获得或失去焦点时触发。主要有下面几种:
- blur 在元素失去焦点时触发。这个事件不冒泡,所有浏览器都支持。
- focus 在元素获得焦点时触发。这个事件不冒泡,所有浏览器都支持。
- focusin 在元素获得焦点时触发。这个事件冒泡,某些浏览器不支持。
- focusout 在元素失去焦点时触发。这个事件冒泡,某些浏览器不支持。
注意:即使blur和focus不冒泡,也可以在捕获阶段侦听到他们。
第三部分:鼠标与滚轮事件
鼠标事件是Web开发中最常用的一类事件,因为鼠标是最主要的定位设备。
- click---用户单击鼠标左键或按下回车键触发
- dbclick---用户双击鼠标左键触发。
- mousedown---在用户按下了任意鼠标按钮时触发。
- mouseenter---在鼠标光标从元素外部首次移动到元素范围内时触发。此事件不冒泡。
- mouseleave---元素上方的光标移动到元素范围之外时触发。不冒泡。
- mousemove---光标在元素的内部不断的移动时触发。
- mouseover---鼠标指针位于一个元素外部,然后用户将首次移动到另一个元素边界之内时触发。
- mouseout---用户将光标从一个元素上方移动到另一个元素时触发。
- mouseup---在用户释放鼠标按钮时触发。
第四部分:键盘和文本事件
-
该部分主要有下面几种事件:
- keydown:当用户按下键盘上的任意键时触发。按住不放,会重复触发。
- keypress:当用户按下键盘上的字符键时触发。按住不放,会重复触发。
- keyup:当用户释放键盘上的键时触发。
- textInput:这是唯一的文本事件,用意是将文本显示给用户之前更容易拦截文本。
这四个事件在用户通过文本框输入文本时才最常用到。
form表单组件中的事件:
1.onfocus 当input 获取到焦点时触发
2.onblur 当input失去焦点时触发,注意:这个事件触发的前提是已经获取了焦点再失去焦点的时候会触发相应的js
3.onchange 当input失去焦点并且它的value值发生变化时触发
4.onkeydown 在 input中有键按住的时候执行一些代码
5.onkeyup 在input中有键抬起的时候触发的事件,在此事件触发之前一定触发了onkeydown事件
6.onclick 主要是用于 input type=button,当被点击时触发此事件
7.onselect 当input里的内容文本被选中后执行一段,只要选择了就会触发,不是非得全部选中
8.oninput 当input的value值发生变化时就会触发,不用等到失去焦点(与onchange的区别)
以上事件可以直接放到input的属性里,例如:<input type="text" onfocus="a();" onblur="b()" onchange="c();" onkeydown="d();" />,
也可以通过js给input dom元素添加相应的事件,如:document.getElementByTagName('input').onfocus = function();
或者通过 obj.addEventListener('onchange',inputChangeHandler)