onkeypress与onkeyup与onkeydown的联系
onkeypress与onkeyup与onkeydown的联系.
(2011-07-24 05:52:17)
标签:
杂谈 |
onkeyup,onkeydown,onkeypress
onkeypress是在用户按下并放开任何字母数字键时发生。系统按钮(例如,箭头键和功能键)无法获得分辨。
onkeyup 是在用户放开任何过去按下的键盘键时发生。
onkeydown 是在用户按下任何键盘键(包括系统按钮,如箭头键和功能键)时发生。
在利用JavaScript做WEB键盘事件侦听捉拿时,重要批准onkeypress、onkeydown、onkeyup三个事件举行出来。该三个事件的厉行次序如下:onkeydown -> onkeypress ->onkeyup。在等闲理况下,批准三种键盘事件均可对键盘输入举行管用的响应。当在切实利用中,会觉察这几者有些不同的差异。 onkeypress事件不能对系统功能键(例如:后退、剔除等,其中对中文输入法不能管用响应)举行正常的响应,onkeydown和onkeyup均能够对系统功能键举行管用的堵截,但事件截获的位置不同,能够依据翔实的情形抉择不同的键盘事件。
由于onkeypress不能对系统功能键举行捉拿,导致window.event对象的keyCode属性和onkeydown,onkeyup键盘事件中获得的keyCode属性不同,重要体目前onkeypress事件的keyCode对字母的大小写敏感,而onkeydown、onkeyup事件不敏感;onkeypress事件的keyCode无法判别主键盘上的数字键和付键盘数字键的, ...
键盘事件包括keydown、kepress和keyup三种,每次敲击键盘都会(顺次?)引发这三种事件,其中keydown和keyup是比拟低级的接近于硬件的事件,浅露的会意是这两个事件能够捉拿到你敲击了键盘中某个键;而keypress是相对于字符层面的较为高级点的事件,这个事件能够捕捉到你键入了哪个字符。能够这么会意,万一你敲击了A键,keydown和keyup事件只是懂得你敲击了A键,它并不懂得你敲的是大写的A(你同时按下了Shift键)还是敲的是小写a,它是以"键"为单位,你敲入了大写的A,它只是当做你敲下了shift和A两个键而已,然而keypress能够捕捉到你是敲入的大写的A还是小写的a.
还要点会一个观念是键盘中的键分为字符(可打印)键和功能键(不可打印),功能键包括Backspace, Enter, Escape, the arrow keys, Page Up, Page Down, and F1 through F12 等
下面说一下键盘事件的翔实利用措施:
键盘事件的event对象中包括一个keyCode属性,IE中只有这一个属性,当为keydown和keyup 事件是,keycode属性表示你翔实按下的键(也称为virtual keycode),当捕捉的是keypress事件时keyCode属性指的是你键入的字符(character code)。
在firefox中情形有些不同,event对象包括一个keyCode属性和一个charCode属性,keydown和keyup事件的时候,keyCode表示的即便你翔实按的键,charCode为0;当捕捉的是keypress事件时,keyCode为0,charCode指的是你按下的字符。
当捕捉的是keypress事件时,当你按的是可打印字符时,keyCode为0,charCode指的是你按下的字符的键值,当你按的是不可打印字符时,keyCode为按下的键的键值,charCode为0。
当心:功能键不会引发keypress事件,因为keypress对应的即便可打印的字符,然而有一点IE和FF 中的差异,你按下一个字符键的同时按下alt键,在IE中不引发keypress事件,然而在ff中可引发,我发目前IE中按下ctrl键的时候只有按下q键会引发事件其他的要么不会引发事件,要么被博览器IE切身捉拿了,例如你按下ctrl_A,全选某个东西,你按ctrl_S保留文件,然而在FF中就许多了,事件都是先递交到网页,再向外递交。
鉴于IE和FF中的差异,万一你比拟懒的话,提倡只利用keydow和keyup事件,这两种事件的利用在IE和FF中大约上未曾差异,也不要捉拿ctrl_A等被博览器定义为迅捷键的事件。
键盘事件event对象还有三个其他的属性altKeymom.imomc.com, ctrlKey, and shiftKey 来推断你按下一个键的时候是否按下了alt等键,这三个属性利用比拟容易,三种事件都能够利用,也不存在ie和ff的接受性问题。因而两者的联系是互补的,而非竞争的。