键盘事件keydown、keypress、keyup随笔整理总结

合集下载

键盘鼠标基础知识大全

键盘鼠标基础知识大全

键盘鼠标基础知识大全

鼠标和键盘是电脑的重要组成部分,在电脑的使用过程中发挥着重要作用,一旦它们消失问题,电脑的使用就无法实现。下面就让我带你去看看(键盘鼠标)基础(学问大全),盼望对你有所关心吧

新手用电脑小技巧:键盘掌握鼠标

1、设置键盘掌握鼠标

“开头”菜单—“掌握面板”—“帮助功能选项”—“鼠标”标签—然后单击选中“使用鼠标键

这样就可以用键盘来掌握鼠标的光标,模拟鼠标的鼠标键都指键盘右侧的小键盘(数字键盘),使用时要使NumLock 键处于有效状态。还可以点击旁边的“设置”按钮来进行鼠标移动速度、NumLock 键状态、快捷键之类的具体设置。假如自己的系统的粘滞键是默认可以使用的,那么也可以直接按键盘的左或右shift键五次,便会跳出粘滞键选项卡,点击“设置”,就可以直接再切换到“鼠标”标签上了。

2、小键盘对应的鼠标键:

移动:8、2、4、6、7、9、1、3键,八个方位

长距离移动:Ctrl+以上八个键(即加速移动)

选鼠标左键:/

选鼠标右键:—

单击:5

双击:+ (或者双击“5”)

拖曳:0(INS)

释放:。(Del)

单击鼠标左键即为先按(/)再按(5)或者直接按(5);双击为双击(5)

或者按(+);右击为先按(—)再按(5),要切换回左击需先按(/),还可以按大键盘那个右击键来进行右击(在右Ctrl键旁边);拖动窗口为先移

动到窗口的标题栏,再按INS,然后用“移动”键(8、2、4、6、7、9、1、3键)将窗口移到合适的位置,最终按Del释放。拖动文件或文件夹的(方法)类似。

VB键盘与鼠标大事基础学问点介绍

WinForm键盘事件

WinForm键盘事件

WinForm键盘事件

最近⽤WinForm做了⼀个俄罗斯⽅块的⼩游戏,其中在处理键盘事件的时候出了点问题,经过查阅资料和反复调试,总结键盘事件如下:

1.键盘事件的响应顺序为KeyDown>KeyPress>KeyUp;

2.KeyDown能响应所有按键,KeyPress能响应除⽅向键和F1、F2...的其他按键;

3.消息在WndProc处理之前,PreProcessMessage⽅法会调⽤多个⽅法对键盘消息进⾏预处理;

4.KeyDown的预处理⽅法:(按执⾏的先后顺序)

(1)ProcessCmdKey,此⽅法处理命令键,命令键的优先级⾼于常规键。如果此⽅法返回 true,则将不调度键消息,⽽且将不发⽣键事件。如果此⽅法返回 false,则将调⽤IsInputKey.

(2)IsInputKey,如果此⽅法返回 true,则表⽰该控件为常规字符,⽽且将引发KeyDown事件。如果此⽅法返回 false,则将调⽤ProcessDialogKey。

(3)ProcessDialogKey,此⽅法处理在控件内实现特殊功能(如在控件及其⽗级之间切换焦点)的物理按键。如果中间控件不处理该键,则将调⽤⽗控件的ProcessDialogKey,直⾄层次结构中的最顶端控件。如果此⽅法返回 true,则将完成预处理,⽽且将不⽣成按键事件。如果此⽅法返回 false,则将发⽣KeyDown 事件。(我做的程序⾥⾯就是这⾥遇到问题了,窗⼝上有两个按钮,这时⽅向键⽆法响应KeyDown 事件。重写ProcessDialogKey ⽅法后,下断点调试发现⽗类的同名⽅法返回值为true,表⽰已经完成预处理。这⾥应该是窗⼝默认的把⽅向键⽤来处理按钮的焦点切换,改成直接返回false后可以响应KeyDown事件,但是不能切换按钮的焦点。)

键盘和鼠标事件

键盘和鼠标事件
Privat Sub Object_KeyPress(KeyAscii As Integer)
语句块
EnLeabharlann Baidu Sub
如果对象是控件数组中的一个, 如果对象是控件数组中的一个,则 KeyPress格式变为: 格式变为: 格式变为 Private Sub Object_KeyPress(Index As Integer, KeyAscii As Integer) 语句块 End Sub Index代表控件数组中的索引值。 代表控件数组中的索引值。 代表控件数组中的索引值
Else ‘如果按键是回车键 如果按键是回车键 If PWord = “admin" Then MsgBox "口令正确,欢迎使用 vbOKOnly, "提示 口令正确, 提示" 口令正确 欢迎使用!", 提示 Unload Me Else TryCount = TryCount + 1 If TryCount < 3 Then MsgBox "口令错误,请重新输入 vbOKOnly + 口令错误, 口令错误 请重新输入!", vbExclamation, "警告 警告" 警告 TxtPWD.Text = "" PWord = ""
例1:获得键号值的小程序:
Private Sub Form_KeyDown(KeyCode As Integer, Shift As Integer) TxtShow.Text = TxtShow.Text & vbCrLf & "按键的 按键的 KeyCode=" & Str(KeyCode) End Sub Private Sub Form_KeyPress(KeyAscii As Integer) TxtShow.Text = TxtShow.Text & " KeyPress=" & Str(KeyAscii) & " 字符:" & Chr(KeyAscii) 字符: End Sub

第9章 键盘与鼠标事件过程

第9章 键盘与鼠标事件过程

参数: (1) Button参数:描述所按下的鼠标键是哪一个. 参数 ①使用二进制值: B2 B1 B0 使用二进制值 B0为1:表示按下了鼠标左键 B1为1:表示按下了鼠标右键 B2为1:表示按下了鼠标中键 例如:Button为2(=010B),即B1 为1,表示按下了右键; 如果按了鼠标左键,则Button为1(=001B).
If Shift = 1 And Button = 2 Then … … ' 这是仅按住Ctrl健且右击鼠标后应执行的代码 End If
Shift参数的符号常数形式 参数的符号常数形式: ② Shift参数的符号常数形式: 1—vbShiftMask:表示Shift键被按下 2—vbCtrlMask:表示Ctrl键被按下 4—vbAltMask :表示Alt键被按下
接着又发生这些控件事件
控件的: KeyPress KeyDown KeyUp 在这里对KeyAscii 在这里对 作一点修改只 影响一个控件
假定窗体KeyPreview为True,并有下面事件过程, 则当在文本框中输入"1"时,实际上得到的是"3"
Sub Form_KeyPress(KeyAscii AsInteger) KeyAscii = KeyAscii + 1 End Sub Sub Text1_KeyPress(KeyAscii As Integer) KeyAscii = KeyAscii + 1 End Sub

VB6.0基本控件的属性教学总结

VB6.0基本控件的属性教学总结

VB6.0基本控件的属性教学总结

VB基本控件的属性,方法经及事件

VB基本控件的属性,方法经及事件

VB基本控件的属性,方法经及事件

所有控件都具有的属性:

1、Name: 表示在代码中用来标识一个控件的名字。

2、Enabled: 表示一个控件是否可以响应一个事件,即该控件可不可用。

值为true: 可以响应;值为false: 不可以看见。

3、Visible: 表示一个控件是否可见。值为true:可以看见;值为false: 不可以看见。所有控件都有具有的事件:

1、KeyDown : 当用户按下键盘上一个键时发生的。

2、KeyUp : 在用户松开键盘上按下的键时发生的。

3、KeyPress : 在Key Down和Key Up事件之间发生。

4、MouseDown : 在鼠标被按下时触发的。

5、MouseUp :在用户松开鼠标键时发生的。

6、Click :在用户单击鼠标左键时发生的。

7、DblClick :在用户双击鼠标时发生的。

一、窗体(Form)

属性:

1、Caption: 表示窗体标题栏的文字。

2、BorderStyle: 一般情况下为默认值,若更改为下列值:

1)值为0:没有窗体标题栏

2)值为1:窗体运行之后不能改变大小

3、WindowState: 设置窗体的大小。

3)值为0:窗体正常大小

4)值为1:窗体最小化

值为2:窗体最大化

4、BackColor: 表示窗体的背景颜色

事件:

1、Initialize(初始化事件): 在窗体加载和显示之前触发,这个事件只触一次。

2、Load(加载事件): 用来完成窗体显示之前需要完成的动作。

KeyDown与keyup与keypress

KeyDown与keyup与keypress

KeyDown、KeyPress和KeyUp事件的区别与联系

KeyDown:在控件有焦点的情况下按下键时发生。

KeyPress:在控件有焦点的情况下按下键时发生。

KeyUp:在控件有焦点的情况下释放键时发生。

1、KeyPress主要用来接收字母、数字等ANSI字符

KeyDown 和KeyUP 事件过程通常可以捕获键盘除了PrScrn所有按键(这里不讨论特殊键盘的特殊键

2、KeyPress 只能捕获单个字符

KeyDown 和KeyUp 可以捕获组合键。

3、KeyPress 不显示键盘的物理状态(SHIFT键),而只是传递一个字符。KeyPress 将每个字符的大、小写形式作为不同的键代码解

释,即作为两种不同的字符。

KeyDown 和KeyUp 不能判断键值字母的大小。KeyDown 和KeyUp 用两种参数解释每个字符的大写形式和小写形式:keycode —显

示物理的键(将 A 和 a 作为同一个键返回,返回大写字母A)和shift —指示shift + key 键的状态而且返回A 或a 其中之一。

5、KeyPress 不区分小键盘和主键盘的数字字符。

KeyDown 和KeyUp 区分小键盘和主键盘的数字字符。

6、KeyDown、KeyUp事件是当按下( KeyDown ) 或松开( KeyUp ) 一个键时发生的。

由于一般按下键盘的键往往会立即放开(这和鼠标不同),所以这两个事件使用哪个差别不大。

而且,up和其他两者还有一个区别:要判断key修改后的状态必须用up。

按键 命令简介

按键 命令简介

1、键盘命令KeyPress——按键keyUP——弹起GetLast1、键盘命令KeyPress——按键keyUP——弹起GetLastKey——检测上次按键KeyDown——按下WaitKey——等待任意按键鼠标命令LeftClick——左键单击LeftUP——左键弹起RightClick——右键单击RihtUP——右键弹起MoveTo——鼠标移动MouseWheel——鼠标滚轮RestoreMousePos——恢复所存坐标UnlockMouse——解除鼠标锁定GetLastClick——检测上次鼠标动作GetCursorShape——得到鼠标形状LeftDown——左键按下LeftDoubleClick——左键双击RightDown——右键按下MiddleClick——中建单击MoveR——鼠标相对移动SaveMousePos——保存当前坐标LockMouse——锁定鼠标位置WaitClick——等待任意鼠标动作GetCursorPos得到鼠标位子坐标控制命令IfColor…End If——颜色判断If…End If——如果Goto——跳转到标记Rem——标记/注释Function——函数Do…Loop——循环ExitScript——脚本退出运行For…Next——循环While…Wend——如果…则循环Call——调用过程Sub——子程序Select Case——情况条件选择EndScript——脚本停止运行RestartScript——重启脚本运行颜色/图形命令GetPixelColor——得到指定点颜色FindColorEx——模糊找色FindPic——找图FindColor——找色/区域找色FindCenterColor——中心找色5、其他命令Delay——延迟MessageBox——弹出对话框UserVar——用户自定义变量Import——导入PutAttachment——释放附件LogStart——开始记录日记SayString——输入文本RunApp——运行SetSimMode设置模拟方式VBSBegin…VBSEnd——VBS执行快TracePrint——调试输出LogStop——停止记录日志多线程序命令DimEnv——定义环境变量名StopThread停止线程运行ContinueThread——继续线程运行BeginThread——启动线程PauseThread——暂停线程GetThreadID——得到当前线程ID事件子程序OnScriptLoad——脚本载入事件子程序OnThreadExit——线程停止事件子程序OnScriptExit——脚本停止事件子程序其他关键字Dim——定义变量Const——定义常数Until——到…为止Then——那么End——结束To——到True——真Plugin——插件ReDim——重新定义变量And——并且Or——或者Else——否则 Exit——退出Step——步长False——假Lib——命令库SetSimMode 0//普通模拟SetSimMode 1//硬件模拟SetSimMode 2//超级模拟在命令的最后以为加H代表硬件模拟,加S代表超级模拟。MoveTo 屏幕X坐标,屏幕Y坐标SaveMousePos//保存鼠标位置RestoreMousePos//恢复鼠标位置LockMouse //锁定鼠标位子UnlockMouse //解除鼠标锁定GetCursorPos mx,my//把当前鼠标位置x和y坐标分别保存在mx和my里MorseClickID=WaitClick(

VB事件慨述

VB事件慨述

VB事件慨述

{ 窗体和图象框类事}

Paint事件:当某一对象在屏幕中被移动,改变尺寸或清除后,程序会自动调用Paint事件。注意:当对象的AutoDraw属性为True(-1)时,程

序不会调用Paint事件。

Resize事件:当对象的大小改变时触发Resize事件。

Load事件:仅适用于窗体对象,当窗体被装载时运行。

Unload事件:仅适用于窗体对象,当窗体被卸载时运行。

{当前光标(Focus)事件}

GotFocus事件:当光标聚焦于该对象时发生事件。

LostFocus事件:当光标离开该对象时发生事件。

注意:Focus英文为“焦点”、“聚焦”之意。(鼠标点击的意思)

{鼠标操作事件}

Click事件:鼠标单击对象。

DbClick事件:鼠标双击事件。

MouseDown、MouseUp属性:按下/放开鼠标键事件。

MouseMove事件:鼠标移动事件。

DragDrop事件:拖放事件,相当于MouseDown、MouseMove和MouseUp的组合。

DragOver事件:鼠标在拖放过程中就会产生DragOver事件。

{键盘操作属性}

KeyDown、KeyUp事件:按键的按下/放开事件。

KeyPress事件:按键事件。

{改变控制项事件}

Change事件:当对象的内容发生改变时,触发Change事件。最典型的例子是文本框(TextBox)。

DropDown事件:下弹事件,仅用于组合框(ComboBox)对象。PathChange事件:路径改变事件,仅用于文件列表框(FileBox)对象

键盘事件keydown、keypress、keyup随笔整理总结(摘抄)

键盘事件keydown、keypress、keyup随笔整理总结(摘抄)

键盘事件keydown、keypress、keyup随笔整理总结(摘抄)

英⽂输⼊法:

事件触发顺序:keydown - > keypress - > keyup

中⽂输⼊法:

firfox:输⼊触发keydown,回车确认输⼊触发keyup

chrome:输⼊触发keydown、keyup,回车确认输⼊只触发keydown

IE:输⼊触发keydown、keyup,回车确认输⼊触发keydown,keyup

Safari:输⼊触发keydown、keyup,回车确认输⼊触发keydown,keyup

opera:输⼊触发keydown、keyup,回车确认输⼊触发keydown,keyup

keypress事件不能对系统功能键(例如:后退、删除等,其中对中⽂输⼊法不能有效响应)进⾏正常的响应,

keydown和keyup均可以对系统功能键进⾏有效的拦截,但事件截获的位置不同。

键盘中的键分为字符(可打印)键和功能键(不可打印),系统功能键包括如下:

Esc、Tab、Caps Lock、Shift、Ctrl、Alt、Enter、Backspace、Print Screen、Scroll Lock、Pause Break、Insert、Delete、Home、End、Page Up、Page Down, F1 through F12,Num Lock、The Arrow Keys。

keypress响应系统功能键总结:

Firefox:⽀持 Esc、Enter、Backspace、Pause Break、Insert、Delete、Home、End、Page Up、Page Down、F1 through F12、The Arrow Keys

JS中的事件对象

JS中的事件对象

JS中的事件对象

⼀、JS中的事件

(⼀)JS中的事件分类

1、⿏标事件

click/dblclick/onmouseover/onmouseout

2、HTML事件

onload/onscroll/onsubmit/onchange/onfocus

3、键盘事件

keydown:键盘按下时触发

keypress:键盘按下并松开的瞬间触发

keyup:键盘抬起时触发

[注意事项]

①执⾏顺序:keydown->keypress->keyup

②当长按时,会循环执⾏keydown->keypress

③有keydown并不⼀定有keyup,当事件触发过程中,⿏标将光标移⾛,将导致没有keyup

④ keypress只能捕获键盘上的数字、字母、符号键,不能捕获各种符号键,⽽keydown和keyup可以。

⑤ keypress⽀持区分⼤⼩写,keydown和keyup并不⽀持。

[确定触发的按键]

①在触发的函数中,传⼊⼀个参数e,表⽰键盘事件;

②使⽤e.keyCode,取到按键的Ascll码值,进⽽确定触发按键;

③所有浏览器的兼容写法(⼀般并不需要):

var evn = e || event;

var code = evn.keyCode || evn.which || evn.charCode;

(⼆)JS中的DOM0事件模型

1、内联模型(⾏内绑定):

直接将函数名作为HTML标签的某个事件属性的属性值;

eg:<button onclick="func()">DOM0内联模型</button>

vb 键盘与鼠标事件过程

vb 键盘与鼠标事件过程

鼠标事件
3个鼠标过程的参数: 1)Button 被按下的鼠标键,可以取3个值,见下表: 符号常量 值 作用 Left_button 1 按下鼠标左键 right_button 2 按下鼠标右键 middle_button 4 按下鼠标中键 2)shfit 表示shift、ctrl、alt的状态 3)x、y:鼠标的当前位置 鼠标位置: 位置由参数x、y确定,他随鼠标光标在窗体上的移动而变化。(x,y)通 常指接收鼠标事件的窗体或控件上的光标。 例子:在窗体上放置一个命令按键,用移动方法移动控件
例子:编写代码对shift和button参数判断 代码见shift和button判断.vbp
鼠标光标的形状
鼠标的形状可以通过mousepointer属性设置。属性值是一 个整数,可以取0~~15,见课本p270 约定: 1、表示用户当前可用的功能,如“I”表示插入文本。 2、表示程序状态的用户可视线索,如沙漏表示程序忙 3、当坐标(X,Y)值为0时改变鼠标光标形状。
鼠标事件
鼠标事件以前常用的有click和dbclick事件,还有mousedown、mouseup、 mousemove事件 以下是鼠标操作的3个过程模板: Private Sub Form_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single) …… End Sub Private Sub Form_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single) …… End Sub Private Sub Form_MouseUp(Button As Integer, Shift As Integer, X As Single, Y As Single) ……

VB_鼠标、键盘事件和ASCII码表

VB_鼠标、键盘事件和ASCII码表

一、鼠标事件

Cilck:用户单击鼠标键时发生

DbLClick:用户双击鼠标键时发生

MouseDown:用户释放鼠标键时发生

MouseMove:移动鼠标时发生

二、键盘事件

KeyDown:在键按下时触发。(可获得一个KeyCode值)

KeyUp:在键弹起时触发。(可获得一个KeyCode值)

KeyPress:在键盘按下再弹起时发生。(它可获得KeyAscii值)

注:

1、既然有了KeyDown和KeyUp,为什么还要KeyPress事件,我将键盘按下去后,到底是触发了KeyPress事件,还是KeyDown或KeyUp事件?答案是,当我们按了一下键盘后,这三种事件都触发。

2、一般而言,大多数程序并不关心KeyDown事件来确定按下的键,KeyPress事件在触发后,能够获得一个KeyAscii值。它指键盘上的某个键与计算机ASCII码对应的值,如键“1”,KeyAscii为49;“A”,KeyAscii 为65;“Enter”,KeyAscii为13。当我们在KeyPress事件中将KeyAscii 的值改为0后,就等于禁止键入。

3、然而并不是所有键盘上的键都有其KeyAscii值,有时,我们程序要判断用户是否按了功能键,可要区别数字小键盘和常规数字键时,那么KeyAscii就无能为力了。此时可以考虑KEyDown和KeyUp事件,当用户击键后,它们能获得一个唯一的KeyCode值,从而判断用户到底按了键盘上的哪个键。可以说,键盘上大多数键(Tab、PrintScreen键除外),都有唯一的KeyCode序列号。

keydown,keypress,keyup三者之间的区别

keydown,keypress,keyup三者之间的区别

keydown,keypress,keyup三者之间的区别

最近看了Javascript⾼级教程中对过滤输⼊的介绍,想实现⽐如电话号码中不能包好⾮数值的字符,⽽相应⽂本中插⼊字符的操作是keypress事件,所以就想通过阻⽌这个事件的默认事件⾏为来阻⽌这个事件的默认⾏为来屏蔽此类字符,但是屏蔽之后所有的安检操作都会被屏蔽,⽂本框会变成可读的。如果只想屏蔽特定的字符,需要检测keypress事件对应的字符编码,然后决定如何响应。

但是我在利⽤keypree事件的时候,完全搞蒙了。因为前⾯看了keydown、keypress、keyup事件,它们到底怎么⽤呢?

下⾯是Js⾼级教程对三者的描述:

keydown:当⽤户按下键盘上的任意键时触发,如果按住不放的话,会重复触发此事件;

keypress:当⽤户按下键盘上的字符键时触发,如果按住不让的话,会重复触发此事件;

keyup:当⽤户释放键盘上的字符键时触发。

那么对应的keyCode(键码)和charCode(字符编码)是什么样⼦的呢?

1. 在发⽣keydown和keyup事件时,event对象的keyCode属性会包含⼀个代码,与键盘上的⼀个特定的键对应。对数字字母键,keyCode属性的值与ASCII码中对应⼩写字母或者数字的编码相同,

2. 发⽣keypress事件意味着按下的键会影响到屏幕中⽂本的显⽰。在所有的浏览器中,按下能够插⼊或者删除字符的键都会触发keypress事件。IE9,FireFox、Chrome和Safari的event对象都⽀持⼀个charCode属性,这个属性只

C#如何捕获键盘按钮和组合键以及KeyPressKeyDown事件之间的区别(附KeyCh。。。

C#如何捕获键盘按钮和组合键以及KeyPressKeyDown事件之间的区别(附KeyCh。。。

C#如何捕获键盘按钮和组合键以及KeyPressKeyDown事件之间

的区别(附KeyCh。。。

1. ⾸先将窗⼝属性KeyPreview设为true,如果属性对话框中找不到,就直接在代码⾥添加;

2. 添加KeyPress / KeyDown事件:

1、KeyPress 和KeyDown 、KeyPress之间的区别

1)KeyPress主要⽤来捕获数字(注意:包括Shift+数字的符号)、字母(注意:包括⼤⼩写)、⼩键盘等除了F1-12、SHIFT、Alt、Ctrl、Insert、Home、PgUp、Delete、End、PgDn、ScrollLock、Pause、NumLock、{菜单键}、{开始键}和⽅向键外的ANSI字符

KeyDown 和KeyUp 通常可以捕获键盘除了PrScrn所有按键(这⾥不讨论特殊键盘的特殊键)

2)KeyPress 只能捕获单个字符

KeyDown 和 KeyUp 可以捕获组合键。

3)KeyPress 可以捕获单个字符的⼤⼩写

4)KeyDown和KeyUp 对于单个字符捕获的KeyValue 都是⼀个值,也就是不能判断单个字符的⼤⼩写。

5)KeyPress 不区分⼩键盘和主键盘的数字字符。

KeyDown 和KeyUp 区分⼩键盘和主键盘的数字字符。

6)其中PrScrn 按键KeyPress、KeyDown和KeyUp 都不能捕获。

2、KeyPress事件

Winform⽂本框只能输⼊数字和退格键和⼩数点:

private void TextBox_KeyPress(object sender, KeyPressEventArgs e)

Winform下的键盘事件

Winform下的键盘事件

Winform下的键盘事件KeyPress:⾮控制按键

KeyDown:按键按下触发

KeyUp:按键弹起触发

private void Form1_KeyPress(object sender, KeyPressEventArgs e)

{

if (e.KeyChar.ToString() == Keys.A.ToString())

{

MessageBox.Show("A");

}

}

private void Form1_KeyDown(object sender, KeyEventArgs e)

{

if (e.KeyData == Keys.F8)

{

MessageBox.Show("F8");

}

if (e.Modifiers == Keys.Alt && e.KeyCode == Keys.D0)

{

MessageBox.Show("Alt + 0");

}

if (e.Modifiers == Keys.Shift && e.KeyCode == Keys.A)

{

MessageBox.Show("Shift + A");

}

}

private void Form1_KeyUp(object sender, KeyEventArgs e)

{

if (e.Modifiers == Keys.Control && e.KeyCode == Keys.C)

{

MessageBox.Show("Ctrl + C");

}

}

事件不触发时,尝试:

KeyPreview=true;

详解键盘事件(keydown,keypress,keyup)

详解键盘事件(keydown,keypress,keyup)

详解键盘事件(keydown,keypress,keyup)

⼀、键盘事件基础

1、定义

keydown:按下键盘键

keypress:紧接着keydown事件触发(只有按下字符键时触发)

keyup:释放键盘键

顺序为:keydown -> keypress ->keyup

2、⽰例

3、详解

1)⽤户按下键盘上的字符键时

⾸先会触发keydown事件

然后紧接着触发keypress事件

最后触发keyup事件

如果⽤户按下了⼀个字符键不放,就会重复触发keydown和keypress事件,直到⽤户松开该键为⽌

2)当⽤户按下⾮字符键时

⾸先会触发keydown事件

然后就触发keyup事件

如果⽤户按下了⼀个⾮字符键不放,就会重复触发keydown事件,直到⽤户松开该键为⽌

3)在keyup事件中⽆法阻⽌浏览器默认事件,因为在keypress时,浏览器默认⾏为已经完成,即将⽂字输⼊⽂本框(尽管这时还没显⽰),这个时候不管是preventDefault还是returnValue = false,都不能阻⽌在⽂本框中输⼊⽂字的⾏为,如要阻⽌默认⾏为,必须在keydown或keypress时阻⽌

4)发⽣keypress事件意味着按下的键会影响到屏幕中⽂本的显⽰,即在所有浏览器中,按下能够插⼊或删除字符的键都会触发keypress事件⼆、键码和键盘事件

系统功能键:Esc、Tab、CapsLk、Shift、Ctrl、Alt、Enter、Backspace、Print Screen、Scroll Lock、Pause Break、Insert、Delete、Home、End、Page Up、Page Down, F1 ~ F12,Num Lock、The Arrow Keys

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

英文输入法:

事件触发顺序:keydown - > keypress - > keyup


中文输入法:

firfox:输入触发keydown,回车确认输入触发keyup
chrome:输入触发keydown、keyup,回车确认输入只触发keydown
IE:输入触发keydown、keyup,回车确认输入触发keydown,keyup
Safari:输入触发keydown、keyup,回车确认输入触发keydown,keyup
opera:输入触发keydown、keyup,回车确认输入触发keydown,keyup

keypress事件不能对系统功能键(例如:后退、删除等,其中对中文输入法不能有效响应)进行正常的响应,
keydown和keyup均可以对系统功能键进行有效的拦截,但事件截获的位置不同。

键盘中的键分为字符(可打印)键和功能键(不可打印),系统功能键包括如下:
Esc、Tab、Caps Lock、Shift、Ctrl、Alt、Enter、Backspace、Print Screen、Scroll Lock、Pause Break、Insert、Delete、Home、End、Page Up、Page Down, F1 through F12,Num Lock、The Arrow Keys。

keypress响应系统功能键总结:
Firefox:支持 Esc、Enter、Backspace、Pause Break、Insert、Delete、Home、End、Page Up、Page Down、F1 through F12、The Arrow Keys
Chrome:支持Enter
Oprea:支持Enter
Safari:支持Enter
IE:支持Esc、Enter

ps:
firefox:上下左右键会触发kepress.

chrome: 上下左右键不会触发kepress.

oprea:上下左右键不会触发kepress.

safari:上下左右键不会触发kepress.

IE:上下左右键不会触发kepress.

================================================================================
keyCode(键码), which, charCode(字符编码)

keydown: 获得keyCode, charCode=0

keypress: 字符(英文区分大小写+数字 / * , . ...等非功能键),keyCode=0 ,获取charCode值, 反之获取keyCode, charCode=0

keyup: 获得keyCode, charCode=0

jquery 中 event.which = original.charCode != null ? original.charCode : original.keyCode;


总结:回车、上下左右、等功能键keydown、keypress、keyup都获取keyCode,并且值相等。


开启大写情况,keydown、keypress(字母,主键盘数字、回车)、keyup,which值相等,小写kepress获取的which不同于keypress、keyup。

keypress事件的keyCode对字母的大小写敏感,而keydown、keyup事件不敏感
keypress事件的which值无法区分主键盘上的数字键和附键盘数字键的,而keydown、keyup的which值对主附键盘的数字键敏感。

IE(ie9以下)只有一个属性KeyCode属性,当为keydown和keyup 事件是,keycode属性表示你具体按下的键(也称为virtual keycode),当捕捉的是keypress事件时keyCode属性指的是你键入的字符(character code)

标准浏览器中情况有些不同,event对象包含一个keyCode属性和一个charCode属性,keydown和keyup事 件的时候,keyCode表示的就是你具体按的键,charCode为0;当捕捉的是

keypress事件时,keyCode为0,charCode指的 是你按下的字符,鉴于IE和FF中的区别,如果你比较懒的话,建议只使用keydow和keyup事件



/**
本文所涉及浏览器(除ie)都为最新版本
**/


用户在使用键盘时会触发键盘事件。目前,对键盘事件的支持主要遵循的是DOM0级。

在英文输入法下,所有浏览器都遵循以下三个事件:

keydown: 当用户按下任意键时触发,而且按住不放的话,会重复触发此事件。
keypress: 当用户按下字符键时触发,而且按住不放的话,会重复触发此事件。按下Esc键也会触发这个事件,Safari3.1之前的版本按下非字符键时也触发。
keyup: 当用户释放键时触发。
在中文输入法下,浏览器之间则表现得不一致,主要情况如下:

IE,Chrome,Safari:触发keydown和keyup, 不触发keypress。
Firefox:首次按下按键时触发keydown,不触发keypress。在停止输入法并改变文本框内容(如按下回车或者空格键)后会触发keyup。
Opera:keydown, keypress和keyup都不触发。
PS : 只有在触发keyup事件才能获得修改后的文本值。
所有元素都支持以上三个事件,一般情况下只有在文本框时才经常用到。

键盘事件的触发过程具体是这样的: 在用户按下键盘上的一个字符键时, 首先会触发keydown事件,然后是keypress事件,最后是keyup事件。其中,keydown和keypress事件是在文本框发生变化之前 被触发;而keyup在文本框发生变化之后被触发。如果用户按下一个键不放,就会重复触发keydown和keypress事件。在用户按下一个非字符键时,首先触发keydown事件,然后就是keyup事件。如果用户按下一个键不放,就会重复触发keydown。

当我们监听这三个事件时,最想得到的数据信息就是键码(keyCode)和字符编码(charCode)了。

键码(keyCode)

在发生keydown和keyup事件时,event对象的keyCode属性会包含一个代码,keyCode属性的值就是小写字母或数字对应的ASCII码(点击这里查看ASCII码表),在程序中可通过如下代码来获得keyCode值:

//EventUtil是一个封装的对象,用来处理跨浏览器事件
var textbox = document.getElementById('myText');
EventUtil.addHandler(textbox,'keydown',function(event){
event = event || window.event;
alert(event.keyCode);
});
以下是keydown和keypress事件存在的一些特殊情况:

在FF和Opera中,按分号键时keyCode值为59,但IE,Chrome和Safari则返回186
在Safari3之前的版本中,上、下、左、右箭头和上翻(PageUp)、下翻(PageDown)键返回大于63000的值。
字符编码(charCode)

在发生keypress事件时,FF、Chrome和Safari的event对象都支持一个charCode属性,charCode属性的值 就是按下的字符键对应的ASCII

编码,这个属性在按下非字符键或发生keydown和keyup事件时值为0;IE和Opera则是在keyCode中 保存字符键的ASCII编码。所以,要想跨浏览器获得字符编码,代码如下:



//获取字符编码
var getCharCode = function(event){
var charcode = event.charCode;
if(typeof charcode == "number" && charcode != 0){
return charcode;
}else{
//在中文输入法下 keyCode == 229 || keyCode == 197(Opera)
return event.keyCode;
}
};


这个方法首先检查charCode属性是否包含数值(在不支持这个属性的浏览器中,值为undefined),在判断是否等于0(兼容keydown和keyup事件),如果条件成立,则返回改值,否则返回keyCode的值。之前的例子获取字符编码如下:

var textbox = document.getElementById('myText');
EventUtil.addHandler(textbox,'keydown',function(event){
event = event || window.event;
alert(getCharCode(event));
});
在得到了字符编码后,可以使用String.fromCharCode()将其转换为实际的字符。

键盘事件的应用

1、 过滤输入——屏蔽某些字符的输入

达到的效果:只能输入数字,输入其他字符没有反应。不屏蔽辅助输入的按键,如退格键,方向键,复制,粘贴等。

原理很简单:在文本框修改前,获取字符编码,判断合理性,不成立则阻止键盘的默认事件。看起来很简单,但由于浏览器的兼容问题,实现起来还是有点难度。代码如下:



var handler= function(e){
e = e || window.event;
var charcode = typeof e.charCode == 'number' ? e.charCode : e.keyCode;
var re = /\d/;
//FF和safari3.1以前版本会对方向键、退格键、删除键触发keypress事件 charcode > 9 可修复此Bug
//!e.ctrlKey 不屏蔽Ctrl+C,Ctrl+V
if(!re.test(String.fromCharCode(charcode)) && charcode > 9 && !e.ctrlKey){
//阻止默认事件
if(e.preventDefault){
e.preventDefault();
}else{
e.returnValue = false;
}
}
};
EventUtil.addHandler(textbox,'keypress',handler);
//监听粘贴事件
EventUtil.addHandler(textbox,'paste',function(e){
e = e || window.event;
var clipboardData = e.clipboardData || window.clipboardData;
if(!/^\d*$/.test(clipboardData.getData('text'))){
//阻止默认事件
if(e.preventDefault){
e.preventDefault();
}else{
e.returnValue = false;
}
}
});


在这个例子的基础上加以修改和调整,就可以应用于放过或屏蔽任何输入文本框的字符。

很遗憾,还有一个bug未能解决,就是在中文输入法时keypress事件失效问题。

针对中文输入法的Bug,目前找到的解决办法是:在文本框加入属性style="i

me-mode:disabled" IE和FF下可禁用输入法;在Chrome,Safar下可为文本框添加keydown事件,判断event.keyCode是否等于299,是的话就阻 止keydown默认事件,这种方法对IE也有效。而对于Opera则没有找到解决办法。

路漫漫其修远兮,吾将上下求索!

相关文档
最新文档