我有一个表单字段,我需要能够检测字段何时更改并使用字段的新值执行一些其他代码.如果按下的键实际上改变了文本框的值,我只想执行代码.这是我提出的解决方案.
function onkeypress(e) {
var value = this.value;
// do something with
}
function onkeyup(e) {
if ( e.which == 8 || e.keyCode == 46 ) { // delete or backspace keys
this.onkeypress(e);
}
}
Run Code Online (Sandbox Code Playgroud)
但是只有一个问题.onkeypress在字段值更新之前被触发,所以当我获取值时,我得到之前的值.如果我知道一种方法来测试密钥是否改变了值,我会专门使用密钥,但是某些字符(如箭头键)对字段的值没有影响.
有任何想法吗?
我正在玩这个剧本.
而且我注意到Alt GrKeyCode 在IE10中是17,在Chrome中是17和18?
有人可以解释为什么它不是18(或一个全新的数字)以及为什么我在Chrome中获得两个弹出窗口?
下面是代码:
document.onkeyup = KeyCheck;
function KeyCheck(e) {
var KeyID = (window.event) ? event.keyCode : e.keyCode;
alert(KeyID);
switch (KeyID)
{
case 18:
document.Form1.KeyName.value = "Alt";
break;
case 17:
document.Form1.KeyName.value = "Ctrl";
break;
}
}
Run Code Online (Sandbox Code Playgroud)
这不是我的代码,我只是偶然发现它.
编辑:有更多的游戏我相信Alt Gr意味着Ctrl+ Alt同时,因为一些需要Alt Gr像é的东西也适用于Ctrl+ Alt.
我正在使用具有JTextPane的java创建应用程序.我想能够在enter按下键时(或当用户进入下一行时)执行一些代码.我在网上看了一下,没有找到解决方案.使用C#解决这个问题会更好吗?如果没有,我如何在JTextPane的keyTyped()事件中注册Enter键?如果C#是一个不错的选择,我将如何在C#中执行此操作?
这是我认为可行的解决方案......但没有
//Event triggered when a key is typed
private void keyTyped(java.awt.event.KeyEvent evt) {
int key = evt.getKeyCode();
if (key == KeyEvent.VK_ENTER) {
Toolkit.getDefaultToolkit().beep();
System.out.println("ENTER pressed");
}
}
Run Code Online (Sandbox Code Playgroud)
为什么上面的例子不起作用是因为无论我按哪个键,我得到一个0的keyCode.我更喜欢用Java解决这个问题但是C#也可以工作,也许更好.另外,请尝试用示例而不是链接回答问题(除非您确实需要).谢谢!
我必须知道按下了什么键,但不需要字符的代码,我想知道当有人按下'A'键时,即使获得的键是'a'或'A',所以其他键都是如此.
我不能使用PyGame或任何其他库(包括Tkinter).只有Python标准库.这必须在终端中完成,而不是图形界面.
不需要字符代码.我需要知道关键代码.
例如:
ord('a') != ord('A') # 97 != 65
someFunction('a') == someFunction('A') # a_code == A_code
Run Code Online (Sandbox Code Playgroud) 我正在尝试修复jQuery UI小部件上的一个非常奇怪的javascript行为.IE7(win XP),jQuery 1.2.6(是的,它是旧版本).
小部件是一个组合框,它捕获键盘事件并具有箭头键的特殊行为.
当我尝试在弹性框输入字段中键入"&"字符时,我会遇到奇怪的行为.
flexbox有一些代码,如:
//initialization
$myInputElement.keypress($.flexbox.process_key);
$.flexbox.process_key = function process_key(e) {
$.flexbox.flexboxFromInput(this).processKey(e);
return true;
};
//on the flexbox object's prototype:
...
processKey: function processKey(e) {
var mod = 0;
if (typeof (e.ctrlKey) !== 'undefined') {
if (e.ctrlKey) mod |= 1;
if (e.shiftKey) mod |= 2;
} else {
if (e.modifiers & Event.CONTROL_MASK) mod |= 1;
if (e.modifiers & Event.SHIFT_MASK) mod |= 2;
}
...
switch (e.keyCode) {
case 38: // up
this.prevResult();
break;
case 40: // down …
Run Code Online (Sandbox Code Playgroud) 我在这里检查了其他问题,但他们没有回答我的问题.我想简单地捕获某些keyCode并将其替换为另一个.我正在处理角色,而不是白色空间,我不需要松散焦点等.
以下是我的代码.但是你可以用你的那些替换那些keyCodes(例如,当按下大写"A"时,它应该替换为零0等).想法是替换keyCode.
phrase.keypress(function(event)
{
if (event.shiftKey)
{
switch (event.keyCode)
{
// Cyrillic capitalized "?" was pressed
case 1053: event.keyCode = 1187; event.charCode = 1187; event.which = 1187; break;
// Cyrillic capitalized "?" was pressed
case 1054: event.keyCode = 1257; event.charCode = 1257; event.which = 1257; break;
// Cyrillic capitalized "?" was pressed
case 1059: event.keyCode = 1199; event.charCode = 1199; event.which = 1199; break;
}
}
});
Run Code Online (Sandbox Code Playgroud)
我也试过keydown和keyup.它们不会改变keyCode.我怎样才能做到这一点?
PS如果可能的话,我正在寻找一种解决方案,它不会"event.preventDefault()并手动将所需的键插入输入字段,然后将光标移动到末尾".我想要更清洁和"正确"的解决方案.谢谢.
我只是尝试使用KeyCode和修饰符掩码并使用Xkb扩展将其转换为KeySym.我似乎无法弄清楚为什么这不起作用.很明显,修饰语不匹配,但我不知道为什么.我甚至不知道我是否正确地转换了这个组.
#include <stdio.h>
#include <stdlib.h>
#include <X11/X.h>
#include <X11/XKBlib.h>
void check(XkbDescPtr keyboard_map, KeyCode keycode, unsigned int mask) {
//What the hell is diff between XkbKeyGroupInfo and XkbKeyNumGroups?
unsigned char info = XkbKeyGroupInfo(keyboard_map, keycode);
int num_groups = XkbKeyNumGroups(keyboard_map, keycode);
int key_width = XkbKeyGroupsWidth(keyboard_map, keycode);
//int num_syms = XkbKeyNumSyms(keyboard_map, keycode);
//Get the group
unsigned int group = 0; // What should this default to?
switch (XkbOutOfRangeGroupAction(info)) {
case XkbRedirectIntoRange:
/* If the RedirectIntoRange flag is set, the four least significant
* bits …
Run Code Online (Sandbox Code Playgroud) 这个:
http://msdn.microsoft.com/en-us/library/system.windows.forms.control.keypress.aspx
...表示我应该在KeyPress事件中访问e.KeyCode,但我似乎没有.我试图只允许1,2,3和退格:
private void textBoxQH1_KeyPress(object sender, KeyPressEventArgs e) {
if ((e.KeyChar != '1') &&
(e.KeyChar != '2') &&
(e.KeyChar != '3') &&
(e.KeyChar != (Keys.Back))) {
e.Handled = true;
}
}
Run Code Online (Sandbox Code Playgroud)
......但是"e." 没有显示像示例所示的"KeyCode"值,并且尝试使用Keys.Back的KeyChar骂我,"运算符'!='不能应用于'char'和'System.Windows.Forms.Keys'类型的操作数"
那我该怎么做呢?
$('body').keypress(function(event){
if(event.keyCode == 46){console.log('Delete Key Pressed')}; //does not work
if(event.keyCode == 32){console.log('SPACE BAR')}; //works
})
Run Code Online (Sandbox Code Playgroud)
目前,我正在开发LG webOS应用程序(使用Vue.js)。一切正常,除了当我按下遥控器上的“后退”按钮时,不会触发“后退”事件。这导致我被迫将函数分配回到上一页,另一个按钮(对用户不友好)而不是正常的返回按钮。
(仅供参考:我正在使用webOS标牌显示)
我已经阅读了有关历史记录API和处理back事件的文档(webOS Back Button),并尝试了以下方法,但是我尝试的方法均无效:
disableBackHistoryAPI
为true,appinfo.json
然后在按下后退按钮(键代码461
)时手动捕获按下事件。disableBackHistoryAPI
为false,appinfo.json
然后为popstate
事件添加一个事件监听器即使试图捕获后退按钮按下事件(因此捕获键码461
)也不起作用。该应用程序可以识别所有其他键码,但是按“后退”按钮根本不执行任何操作(不触发任何事件)。有人对此有任何想法吗?
为确保问题本身不受应用程序限制,我安装了以下应用程序Back Button Application。相同的结果:没有返回事件。
捕获关键事件的代码(记录除之外的所有关键代码461
):
window.addEventListener('keydown', evt => {
evt = evt || window.event
console.log(evt.keyCode)
if (evt.keyCode === 461) {
router.go(-1)
}
})
Run Code Online (Sandbox Code Playgroud)
后退按钮是被登记在LG的webOS模拟器(V4.0)。如前所述,我正在使用的框架是Vue.js,我使用Cordova Toast将项目编译为LG webOS(以及将来的Samsung Tizen)。
-奖励已过期但仍在寻找答案-