キーコードをアラート

イベント関連でもう少し調べた。
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;
}

とりあえずブラウザ上でキー押すとちゃんと取れるようになった。
IEFirefoxOperaで確認。ホントはもっと多くのブラウザで判定しなきゃなのかな。
ブラウザの判定は、navigator.userAgentで判断するのがいいらしい。
なぜにkey()でCtrlとShiftとAltをスルーしてるかというと、それをやらないと「Shift-f」とかが取ってこれなかったから。。。
getKeyCode()の中で判定してreturnしても結局アラート出ちゃうし。
や、普通にキー判定して処理振り分けるとかならgetKeyCode()で判断するようにした方がいいのか。