按鍵是一個令人困惑的事件。雖然KeyDown和KEYUP會告訴你哪個特定鍵鍵盤上關閉或剛回來時,鍵擊事件應該告訴你會出現什麼字符在屏幕上,這就是爲什麼你引用的jQuery的文件說:
例如,小寫字母「a」將被報告爲65由KeyDown和KEYUP,但作爲由97按鍵。
讓事情變得更糟Safari不會觸發鍵盤事件不會在屏幕上寫東西 - 這就是爲什麼箭頭鍵不起作用。但是,Firefox確實會觸發箭頭鍵的按鍵事件。兩者都是規範的合理實現,所以不要指望要麼改變。這就是爲什麼有人建議堅持使用keydown或keyup。
但是,它看起來像你想利用的優勢,當一個鍵被按下,你想有一個箭頭鍵來做到這一點按鍵事件重複(在Firefox)如何。如果是這樣的話,你需要編寫一個處理器來查看keydown和keypress。這裏有兩種不同的方式瀏覽器反應到方向鍵被按下:
- 火狐註冊一個keydown事件也重複按鍵事件(注:只是擊中一次鍵,將註冊既有的keydown和按鍵事件)
- Safari瀏覽器註冊了keydown事件和重複keydown事件
一個快速的黑客攻擊,使這項工作相當不錯的方向鍵和拿到鑰匙的重複工作是:
function moveItem(evt) {
// do something with `this` and evt.keyCode here...
}
$(document.documentElement)
.keypress(function(evt) {
if ($.data(this, '_lastKeyEvent') != 'keydown') {
// since firefox will do both a keydown and a keypress for the first
// keydown, we ignore the very first keypress
moveItem.call(this, evt);
}
$.data(this, '_lastKeyEvent', 'keypress');
})
.keydown(function(evt) {
moveItem.call(this, evt);
$.data(this, '_lastKeyEvent', 'keydown');
});
我聽說在此之前,'keypress'是這樣的,使用像'keydown'或'keyup'較好,產生較少的問題,更明確的事件。 – 2010-01-12 20:18:45
爲什麼很多人用的keydown,不KEYUP更有意義? – 2010-01-12 20:19:25