[英]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.