キーコードをアラート
イベント関連でもう少し調べた。
onKeydownイベントで押されたキーを判定してみる。
- keyevent.js
function getKeyCode(e) { var keyHash = { 13 : "Enter", 32 : "Space", 33 : "PageUp", 34 : "PageDown", 37 : "Left", 38 : "Up", 39 : "Right", 40 : "Down" }; e = (e) ? e : ((event) ? event : null); var key = "" var tmp = ""; if(e.ctrlKey) key += "Ctrl-"; if(e.altKey) key += "Alt-"; if(e.shiftKey) key += "Shift-"; if(navigator.userAgent.indexOf("Gecko/")) { tmp = keyHash[e.which]; if(!tmp) tmp = String.fromCharCode(e.which+32).toLowerCase(); } else if(navigator.userAgent.indexOf("Opera")) { tmp = keyHash[e.keyCode]; if(!tmp) tmp = String.fromCharCode(e.which).toLowerCase(); } else { tmp = keyHash[event.keyCode]; if(!tmp) tmp = String.fromCharCode(event.keyCode).toLowerCase(); } key += tmp; return key; }
- test.js
function key(e) { if(e.keyCode == 16 || e.keyCode == 17 || e.keyCode == 18) { } else { var code = getKeyCode(e); alert(code); } } window.onload = function() { window.document.onkeydown = key; }
とりあえずブラウザ上でキー押すとちゃんと取れるようになった。
IEとFirefoxとOperaで確認。ホントはもっと多くのブラウザで判定しなきゃなのかな。
ブラウザの判定は、navigator.userAgentで判断するのがいいらしい。
なぜにkey()でCtrlとShiftとAltをスルーしてるかというと、それをやらないと「Shift-f」とかが取ってこれなかったから。。。
getKeyCode()の中で判定してreturnしても結局アラート出ちゃうし。
や、普通にキー判定して処理振り分けるとかならgetKeyCode()で判断するようにした方がいいのか。