[英]How to detect `delete` and `.` when user press the keyboard on Chrome?
当我按下.
它触发三个事件, keydown
, keypress
和keyup
。
keydown
which: 190 == ¾
keyCode: 190 == ¾
keypress
which: 46 == .
keyCode: 46 == .
keyup
which: 190 == ¾
keyCode: 190 == ¾
当我按下delete
时,它会触发两个事件keydown
和keyup
。
keydown
which: 46 == .
keyCode: 46 == .
keyup
which: 46 == .
keyCode: 46 == .
我想按.
并能够得到对应的字符( 46 ==.
)。 但是在keydown
和keyup
上,我得到190
,即¾
。 在keypress
上我得到正确的值,但是当我按下delete
时不会触发这个事件。
当我按下delete
时,我在keydown
和keyup
上得到代码46
。 但是代码46
是.
而不是delete
。
如果是.
按下或delete
键?
要测试的页面: http://jsfiddle.net/Eg9F3/
事实上,这很奇怪,但这是逻辑。
function String.fromCharCode 使用真正的字符代码,而不是 KB 操作(左,删除...)
为什么不简单地按 keyCode 过滤?
我已经强制执行与 Firefox 相同的行为,例如 jsFiddle
$("textarea").keydown(function(e) {
// if the key pressed was found on the list of specialChars
if (specialChars[e.keyCode])
{
// triggers the fake event
$("textarea").trigger("chromekeypress", e);
// temporary avoid keypress from firing
$("textarea").unbind("keypress");
setTimeout(function(){ $("textarea").bind("keypress", handleKey); },10);
}
});
$("textarea").keypress(handleKey); // main event
$("textarea").bind("chromekeypress", chromeKeyPress); // chrome workaround
function chromeKeyPress(i,e){
e.type="chromekeypress";
e.which = 0; // copy Firefox behavior, which == 0 means a special key pressed
handleKey(e); // fires the main event
}
function handleKey(e) {
// which is going to be 0 if it is a special key
// and keycode will have the code of the special key
// or
// which will have the value of the key
$("#r").html($("#r").html() + "\n" +
e.type + "\n" +
" which: " + e.which + " == " + String.fromCharCode(e.which) + "\n" +
" keyCode: " + e.keyCode + " == " + String.fromCharCode(e.keyCode) + "\n" +
"");
}
“keypress”处理程序中“which”的值与“keydown”或“keyup”处理程序中的“which”的含义不同。 其中,它是键盘上键的键码,而不是字符序数。 在“按键”中,它是角色,但您没有得到Del
的“按键”(正如您所注意到的)。
因此,“keypress”处理程序(用于“.”)中的 46 与Del
的“keydown”和“keyup”事件中的 46 不同。
您可能应该使用“keydown”或“keyup”并检查键码。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.