我有幾個可編輯的div
s。我想通過按箭頭鍵(38和40)跳過它們。如何在按住箭頭鍵的情況下在Firefox中獲得自動重複的keydown事件?
在Mac OS和Linux上的Firefox 3將不會重複持有密鑰的事件。顯然只有keypress
事件支持重複。由於鑰匙38和40只支持我有點卡住了。
我有幾個可編輯的div
s。我想通過按箭頭鍵(38和40)跳過它們。如何在按住箭頭鍵的情況下在Firefox中獲得自動重複的keydown事件?
在Mac OS和Linux上的Firefox 3將不會重複持有密鑰的事件。顯然只有keypress
事件支持重複。由於鑰匙38和40只支持我有點卡住了。
您可以使用按鍵,並檢查e.keyCode == 38,40,而不是e.which或e.charCode 這在Mac和Win中是一致的。
$('#test').bind($.browser.mozilla ? 'keypress' : 'keyup', function(e) {
if ((e.which || e.keyCode) == 40) { /* doSometing() */ }
});
參見JavaScript Madness: Keyboard Events(3.2。返回的值上字符事件) 和event.keyCode上MDC。
是的,你有點卡住了。您可以使用計時器模擬您想要的行爲,直到您收到相應的keyup
,但顯然這不會使用用戶的計算機的鍵盤重複設置。
以下代碼使用上述方法。要處理的keydown事件(包括真實和模擬)的代碼應該在handleKeyDown
:
var keyDownTimers = {};
var keyIsDown = {};
var firstKeyRepeatDelay = 1000;
var keyRepeatInterval = 100;
function handleKeyDown(keyCode) {
if (keyCode == 38) {
alert("Up");
}
}
function simpleKeyDown(evt) {
evt = evt || window.event;
var keyCode = evt.keyCode;
handleKeyDown(keyCode);
}
document.onkeydown = function(evt) {
var timer, fireKeyDown;
evt = evt || window.event;
var keyCode = evt.keyCode;
if (keyIsDown[keyCode]) {
// Key is already down, so repeating key events are supported by the browser
timer = keyDownTimers[keyCode];
if (timer) {
window.clearTimeout(timer);
}
keyIsDown[keyCode] = true;
handleKeyDown(keyCode);
// No need for the complicated stuff, so remove it
document.onkeydown = simpleKeyDown;
document.onkeyup = null;
} else {
// Key is not down, so set up timer
fireKeyDown = function() {
// Set up next keydown timer
keyDownTimers[keyCode] = window.setTimeout(fireKeyDown, keyRepeatInterval);
handleKeyDown(keyCode);
};
keyDownTimers[keyCode] = window.setTimeout(fireKeyDown, firstKeyRepeatDelay);
keyIsDown[keyCode] = true;
}
};
document.onkeyup = function(evt) {
evt = evt || window.event;
var keyCode = evt.keyCode;
var timer = keyDownTimers[keyCode];
if (timer) {
window.clearTimeout(timer);
}
keyIsDown[keyCode] = false;
};
在同一頁面(這也是我的股票的關鍵活動頁面我所指的人)也有「2.2事件觸發的自動重複」,這表明用於自動重複'特殊鍵keypress'事件瀏覽器支持例如光標鍵不比'keydown'事件更好。 – 2009-12-14 22:13:04
'keydown'適用於所有瀏覽器,除了firefox(在我的情況下safari)而不是'keyup'對我來說工作的很好。謝謝! – pex 2009-12-15 15:06:41
'$ .browser'現在已折舊。 – Cullub 2016-02-05 21:32:24