在我的HTML页面中有一个输入文本字段.我只想输入键盘上的数字键和左/右箭头.我尝试了以下JavaScript,但遇到了一个问题.
<input onkeypress="return allowNumberOnly(event)" />
function allowNumberOnly(event) {
event = event || window.event;
var charCode = (event.which) ? event.which : event.keyCode;
//keyCode 48-57 represent the number 0-9
//keyCode 37,39 represent the Left and Right arrow
//keyCode 46 represent the Delete key
//keyCode 8 represent the Backspace key
return charCode == 37 || charCode == 39 || charCode == 46 || charCode == 8
|| (charCode >= 48 && charCode <= 57);
}
Run Code Online (Sandbox Code Playgroud)
测试完这段代码后,我发现左箭头和%特殊字符的keyCode都是37的问题.所以我不能阻止用户输入%字符,同时允许左箭头.我不知道为什么会这样.我一直认为keyCode对于键盘上的每个键都应该是唯一的.我想过使用onkeyup而不是onkeypress.但是onkeyup会允许用户先输入无效字符,然后从输入文本中删除.这种行为不是我想要的.任何建议将不胜感激.
我调试了FireFox中的代码,发现了以下区别.
1.如果输入%,event.which == 37和event.keyCode == 0
2.如果输入左箭头,则event.which …
我想将keyevent键码值转换为字符串或char值.任何人都会这样做.
例如,当我按下'SPACE'时,'让我们说'有一个键码20,我想将该值转换为char或字符串.有没有标准的方法,或者我必须为键盘上的每个键写一堆'if'语句?
我想通过自动化点击iOS模拟器中的主页按钮.
我只是想知道是否可以使用IOS keycode事件单击主页按钮.
keypress
不推荐使用javascript事件:https :
//developer.mozilla.org/en-US/docs/Web/API/Document/keypress_event
有些人建议完全依赖keydown
事件,例如:
Keydown
是我们唯一需要的键盘事件
https://www.mutuallyhuman.com/blog/2018/03/27/keydown-is-the-only-keyboard-event-我们需要/
问题是keydown
和keypress
不是同义词。至关重要的是,它们在许多/大多数情况下不会返回相同的字符。Keydown
表示按下了键盘上的哪个键,而keypress
表示用户实际键入的字符。
在英语中,区分大小写很重要:
letter = String.fromCharCode(event.which);
Run Code Online (Sandbox Code Playgroud)
当按下键盘上的“a”键时,字母是“a”加keypress
,但它是“A”加keydown
。
JCK 语言的情况变得更加复杂,因为keypress
接收正确的国际键盘布局字符,而不是keydown
将所有内容转换为单字节字符。
现在在 IME 组合过程中会触发 keydown 和 keyup 事件:https :
//www.fxsitecompat.com/en-CA/docs/2018/keydown-and-keyup-events-are-now-fired-during-ime-composition/
那么,随着keypress
被弃用,当我们关心用户打算输入的字符时,我们应该使用什么,考虑大小写、非 ASCII 字符和多字节字符?
相关问题和参考:
keyup 事件总是返回大写字母
=> 答案推荐使用keypress
.
String.fromCharCode 不适用于 keydown 事件
=> 答案建议使用keypress
.
keypress 和 keydown 上的 String.fromCharCode 返回错误的字符
=> 答案指出keypress
和keydown
事件不可互换。
我有一个使用乔恩Zaefferer的"自动完成" jQuery插件,表单字段.如果我键入一些文本,然后选择它的一部分并点击退格键,则自动完成列表会更新.但是如果我点击删除而不是退格,则自动完成列表会消失.
我期待在该插件的代码,它看起来像自动完成更新由该领域的keydown事件触发,都退格键和删除触发器的keydown.
退格和删除之间是否存在根本区别?
jquery autocomplete keycode jquery-plugins jquery-autocomplete
使用Ctrl+ +,Ctrl+ -和Ctrl+ 0作为应用程序放大,缩小和恢复默认缩放(通常为100%)操作的快捷方式似乎很自然.现在,在Delphi中,我可以将Ctrl+ +和Ctrl+ 指定0为快捷方式.但前者要求使用键盘主要部分的加号; 不能使用数字键盘的加号.
但是,当我想将Ctrl+ 指定-为快捷方式时,会出现问题.它根本不起作用.如果我在IDE中指定"Ctrl + - ",则存储在ShortCut
属性中的值为16495
.如果我们ssCtrl
从中减去,我们得到111.人们会相信,解决方法是分配ShortCut := 45 + ssCtrl
,或者等同于ShortCut := Menus.ShortCut(45, [ssCtrl])
,因为ord('-') = 45
.但这不起作用.
但是,我找到了一个有效的解决方案:ShortCut := 189 + ssCtrl
.我选择189,因为这是我按下" - "键并听取KeyDown
事件时收到的数字.
那么,为什么我对此不满意?好吧,我担心常数189只对瑞典键盘有效.我试图阅读这个,并且,像往常一样,MSDN文档相当清楚,但是,谁知道Delphi如何处理事情.
我正在为一个特殊的设备制作一个SSH客户端,它的键盘上没有返回键,我的问题是如何将返回键编码在发送到shell的字符串中?它只是'\n'?
有没有办法得到这个?我正在使用INPUT
类来模拟按键,当想要在类型变量中按键时char
,我需要使用以下方法:
INPUT ip;
ip.type = INPUT_KEYBOARD;
//a bunch of code, and flags...
ip.ki.wVk = toupper(foo);
Run Code Online (Sandbox Code Playgroud)
...其中foo是类型char
和用户定义的.
这很好用,直到用户输入一个不是常规字母的字符,这导致注册完全不同的密钥(这是可以理解的).这就是为什么我问是否有一种方法可以让我从变量的值中获取十六进制密钥代码?
我知道我可以switch(foo) case '1': //and so on...
用相应的密钥代码替换不支持的字符,但实际上,这意味着很多不必要的代码.
那么,有什么办法吗?答案非常受欢迎,如果没有,我会以更复杂的方式解决问题.但是,既然这个问题已经发生了好几次,我觉得知道参考可能会有好处.
在我的应用程序中,当我按下按钮时,我需要找到键盘隐藏操作.为此,我需要找到该按钮的密钥代码,但是,我不知道按钮的密钥代码.谁能告诉我这个按钮的键码是什么?
这是我的代码:
public boolean dispatchKeyEventPreIme(KeyEvent event) {
if (event.getKeyCode() == KeyEvent.KEYCODE_BACK) {
hide.setVisibility(View.INVISIBLE);
return true;
}
return super.dispatchKeyEvent(event);
}
Run Code Online (Sandbox Code Playgroud)
这是适用于后退按钮的代码,但不适用于隐藏键盘按钮.
通过java机器人类按特殊字母(土耳其语等)我有问题.我有一种按键的方法,可以作为alt + keycode.我无法将一些特殊字母转换为当前键码.那我怎么解决呢 感谢名单
例如:
KeyStroke ks = KeyStroke.getKeyStroke('ö', 0);
System.out.println(ks.getKeyCode());
Output : 246
// So alt+0246='ö'
//but if I convert '?' to keycode
//Output is 351 . So alt+351= '_' and alt+0351= '_'
//What is the Correct combination for '?'. same for '?', '?','?', '?', '?', '?', '?', '?'
Run Code Online (Sandbox Code Playgroud)
按键:
public void altNumpad(int... numpadCodes) {
if (numpadCodes.length == 0) {
return;
}
robot.keyPress(VK_ALT);
for (int NUMPAD_KEY : numpadCodes) {
robot.keyPress(NUMPAD_KEY);
robot.keyRelease(NUMPAD_KEY);
}
robot.keyRelease(VK_ALT);
}
Run Code Online (Sandbox Code Playgroud)