編集可能なものがいくつかありますdiv
。矢印キー(38と40)を押してジャンプしたいと思います。
MacOSおよびLinux上のFirefox3は、キーを押したままでもイベントを繰り返しません。明らかにkeypress
、繰り返しはイベントのみがサポートされています。キー38と40はでしかサポートされていないので、keydown
ちょっと行き詰まっています。
編集可能なものがいくつかありますdiv
。矢印キー(38と40)を押してジャンプしたいと思います。
MacOSおよびLinux上のFirefox3は、キーを押したままでもイベントを繰り返しません。明らかにkeypress
、繰り返しはイベントのみがサポートされています。キー38と40はでしかサポートされていないので、keydown
ちょっと行き詰まっています。
はい、あなたはちょっと立ち往生しています。対応するを受け取るまでタイマーを使用して、必要な動作をエミュレートできますkeyup
が、これは明らかにユーザーのコンピューターのキーボードリピート設定を使用しません。
次のコードは上記の方法を使用しています。キーダウンイベント(実際のイベントとシミュレートされたイベントの両方)を処理するコードは、次のように入力する必要があります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;
};
keypress を使用して、e.which または e.charCode の代わりに e.keyCode == 38,40 を確認できます。これは、Mac と Win で一貫しています。
$('#test').bind($.browser.mozilla ? 'keypress' : 'keyup', function(e) {
if ( (e.which || e.keyCode) == 40 ) { /* doSometing() */ }
});
JavaScript Madness: キーボード イベント(3.2. 文字イベントで返される値) および MDC の event.keyCode を参照してください。