onkeyup,onkeydown,onkeypress

2024-02-04 07:58

本文主要是介绍onkeyup,onkeydown,onkeypress,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!


在使用JavaScript做WEB键盘事件侦听捕获时,主要采用onkeypress、onkeydown、onkeyup三个事件进行出来。该三个事件的执行顺序如下:onkeydown -> onkeypress ->onkeyup。在一般情况下,采用三种键盘事件均可对键盘输入进行有效的响应。当在实际使用中,会发现这几者有些不同的差别。
onkeypress事件不能对系统功能键(例如:后退、删除等,其中对中文输入法不能有效响应)进行正常的响应,onkeydown和onkeyup均可以对系统功能键进行有效的拦截,但事件截获的位置不同,可以根据具体的情况选择不同的键盘事件。
由于onkeypress不能对系统功能键进行捕获,导致window.event对象的keyCode属性和onkeydown,onkeyup键盘事件中获取的keyCode属性不同,主要表现在onkeypress事件的keyCode对字母的大小写敏感,而onkeydown、onkeyup事件不敏感;onkeypress事件的keyCode无法区分主键盘上的数字键和付键盘数字键的,而onkeydown、onkeyup的keyCode对主付键盘的数字键敏感。
注:在Maxthon浏览器中,onkeydown和onkeyup有连续响应两次键盘事件的BUG,onkeydown不能正常地对F1~F12的功能键进行正常的截获(onkeyup没有发现该问题),具体原因不明。不知道以后是否会进行订正。

键盘事件包括keydown、kepress和keyup三种,每次敲击键盘都会(依次?)触发这三种事件,其中keydown和keyup是比较低级的接近于硬件的事件,通俗的理解是这两个事件可以捕获到你敲击了键盘中某个键;而keypress是相对于字符层面的较为高级点的事件,这个事件能够捕捉到你键入了哪个字符。可以这样理解,如果你敲击了A键,keydown和keyup事件只是知道你敲击了A键,它并不知道你敲的是大写的A(你同时按下了Shift键)还是敲的是小写a,它是以"键"为单位,你敲入了大写的A,它只是当成你敲下了shift和A两个键而已,但是keypress可以捕捉到你是敲入的大写的A还是小写的a.

在介绍Prototype中Event对象前先介绍一下浏览器中的事件模型,浏览器中的事件主要有HTML事件、鼠标事件和键盘事件,前两种事件比较好理解,这里主要解释一下键盘事件以及它在IE和firefox中的区别.

还要理解一个概念是键盘中的键分为字符(可打印)键和功能键(不可打印),功能键包括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对象还有三个其他的属性altKey, ctrlKey, and shiftKey 来判断你按下一个键的时候是否按下了alt等键,这三个属性使用比较简单,三种事件都可以使用,也不存在ie和ff的兼容性问题

这篇关于onkeyup,onkeydown,onkeypress的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/676811

相关文章

onkeypress 和 onkeydown 的区别

 本文将详细介绍js onkeypress与onkeydown 事件区别:一个放开一个没有放开,onkeydown先于onkeypress 发生,需要的朋友可以参考下 onkeypress 和 onkeydown 是有区别,下面将讲解 onkeypress 与 onkeydown 事件的区别。  onkeypress 事件在用户按下并放开任何字母数字键时发生。但是系统按钮(例如:箭

onkeyup同时执行两个方法怎么写

οnkeyup="checkinput_zzjs(event)" 与 onKeyUp="this.value=this.value.replace(/\D/g,'')"  合并后写为:οnkeyup="checkinput_zzjs(event),this.value=this.value.replace(/\D/g,'')"

概念onkeypress、onkeyup、onkeydown区别:

onkeypress 这个事件在用户按下并放开任何字母数字键时发生。系统按钮(例如,箭头键和功能键)无法得到识别。 onkeyup 这个事件在用户放开任何先前按下的键盘键时发生。onkeydown 这个事件在用户按下任何键盘键(包括系统按钮,如箭头键和功能键)时发生。小demo:只在在输入的时候可以用backspace,其他地方不可以用。<script type="text/javascript"

在输入框输入完数据是,enter键便捷操作、 onkeydown()事件。

document.onkeydown = function(e){  var ev = document.all ? window.event : e; if(ev.keyCode==13) { $('#btn').click(); return false; } } $('#btn').click(function(){ //逻辑操作 });

Android TabActivity中onKeyDown无法响应的解决方法

Android中某个类继承Activity的子类TabActivity时,重载Activity中的public boolean onKeyDown(int keyCode, KeyEvent event)方法时,点击按键时并得不到响应,解决的方法是: 重载public boolean dispatchKeyEvent(KeyEvent event)方法,其示例代码如下: privat

onkeypress 事件

定义和用法 onkeypress 事件会在键盘按键被按下并释放一个键时发生。 语法 οnkeypress="SomeJavaScriptCode"参数 描述 SomeJavaScriptCode 必需。规定该事件发生时执行的 JavaScript。 支持该事件的 HTML 标签: <a>, <acronym>, <address>, <area>, <b>, <bdo>, <b

安卓onkeyup onkeydown事件小记

安卓软键盘的实现:http://blog.csdn.net/hfsu0419/article/details/7924673 Activity.onKeyDown(); 当某个键被按下时会触发,但不会被任何的该Activity内的任何view处理。 默认按下KEYCODE_BACK键后会回到上一个Activity。 Activity.onKeyUp(): 当某个按键被按下,松开后

浅析OnKeyPress事件和OnKeyDown、OnKeyUp事件

OnKeyPress事件     OnKeyPress事件是在用户按下键盘上任何一个可打印的字符时发生,只有能接收键盘输入的组件才有OnKeyPress事件。我们常常利用OnKeyPress事件截取在编辑框和组合框组件中所输入的击键,还可以立即测试击键的有效性或在字符输入时对其进行一定的格式处理。     例如,在TEdit组件上捕获OnKeyPress事件,判断输入的是否

onBackPressed、onKeyDown、finish、onDestroy

监听返回键的两种方式: // 捕获返回键的方法1 @Overridepublic boolean onKeyDown(int keyCode, KeyEvent event) {if (keyCode == KeyEvent.KEYCODE_BACK && event.getRepeatCount() == 0) {// 按下BACK,同时没有重复 Log.d(TAG, "onKeyDown

javascript onkeydown事件

转自:http://www.jb51.net/article/56376.htm JavaScript onkeydown 事件 用户按下一个键盘按键时会触发 onkeydown 事件。与 onkeypress 事件不同的是,onkeydown 事件是响应任意键按下的处理(包括功能键),onkeypress 事件只响应字符键按下后的处理。 提示 Internet Explorer/Chro