LoginSignup
6
10

More than 5 years have passed since last update.

JavaScriptのキーイベント系とjQueryのキーイベント系のクロスブラウザ対応

Last updated at Posted at 2018-11-04

概要

クロスブラウザ対応について調べていたところ、JavaScriptの面倒なところをjQueryが吸収してるんだなーとしみじみと思ったので本記事を書きました
キーコードの取得方法周辺のお話を書いています
※ あまりJavaScriptに詳しくないので、なにかご指摘あれば教えていただければと思います

(通常の)JavaScript

Eventオブジェクトの取得方法

IE8以下ではwindow.eventにイベント情報が含まれているため、以下取得が主流?

 var e = e || window.event;

イベント発生要素

イベントが発生したElementを返す
微妙に全ブラウザ対応のプロパティが無い・・・

プロパティ 説明
e.target イベント発生要素を返す(IE8以下非対応)
e.srcElement イベント発生要素を返す(FireFoxは61以下非対応)

キーイベントと関連プロパティ

  • イベント
イベント 説明  取得対象キー
onkeypress pressing = キーボードの押下中 画面上表示可能なキー
onkeydown presses = キーを押下した時 機能キー(F5, enter等)
onkeyup releases = キーを離した時 機能キー(F5, enter等)
  • 関連プロパティ
プロパティ 説明 onkeypress URL
e.key 入力値そのものを取得(IE8以下非対応) 対応 KeyboardEvent key Property
e.code unicode値を返す(ブラウザ依存 ※ IE非対応、キーボード依存) 対応 KeyboardEvent code Property
e.charCode unicode値を返す(ブラウザ依存) onkeypress時のみ KeyboardEvent charCode Property
e.keyCode ASCII値(onkeypress時)、unicode値を返す(FireFox非対応) 対応 KeyboardEvent keyCode Property
e.which ASCII値(onkeypress時)、unicode値を返す(IE8以下非対応) 対応 KeyboardEvent which Property

jQuery

上のJavaScript仕様をJQueryのイベントオブジェクトがまとめてくれています笑
マルチブラウザのことしっかり書いていますね

jQuery(https://jquery.com/) より以下抜粋

It makes things like HTML document traversal and manipulation,
event handling, animation, and Ajax much simpler with an easy-to-use API that works across a multitude of browsers.

Eventオブジェクトの取得方法

全く気にしなくて大丈夫です
通常のJavaScriptとObjectが違いますので、そこだけ注意かと思います
Event Object | jQuery API Documentation


$("document").on("keydown", function(e) {
    // e自体がjQueryのEventオブジェクト
});

イベント発生要素

イベントが発生したElementを返す
srcElementの考慮が不要になっています
表にしていますが、JavaScriptと比べるためです
event.target | jQuery API Documentation

プロパティ 説明
e.target イベント発生要素を返す(全ブラウザ対応)

キーイベントと関連プロパティ

  • イベント

このあたりはあまり変わらない
Keyboard Events | jQuery APIDocumentation

イベント 説明
keypress JavaScriptのonkeypress
keydown JavaScriptのonkeydown
keyup JavaScriptのonkeyup
  • 関連プロパティ

いろいろまとめてくれています
表にしていますが、JavaScriptと比べるためです

プロパティ 説明 URL
e.which JavaScriptのkeyCode、charCodeを標準化したもので、unicode値を返す event.which jQuery API Documentation
  • 使い方

結局jQueryでやるとすごい簡単にできるという

$("document").on("keydown", function(e) {
    var keyCode = e.which;
})

付録:同時押しキー

ShiftやCtrlと他キーの同時押し等の判定は以下のようなプロパティもあるので、チャットのメッセージ入力欄等でも使えそうです(通常のJavaScriptも)

プロパティ 説明
e.shiftKey Shiftキーを押した状態か
e.ctrlKey Ctrlキーを押した状態か

結論

クロスブラウザ対応はjQuery等のライブラリにお任せしましょう
JavaScriptの記事がありすぎて、混乱してました・・・

6
10
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
10