JavaScript 独自イベントを作成し、キーバインドの有効・無効を切り替える

      elm.addEventListener"show"function(){
        window.dispatchEvent(evInputStart);
      });
      elm.addEventListener"hide"function(){
        window.dispatchEvent(evInputEnd);
      });
 
function avoidKeyEvent(e) {
  return;
}
function dispatchKeyEvent(e) {
  e = e || event// to deal with IE
  
  map[e.keyCode] = e.type == 'keydown';

  if (isArrowKey(e)) {
    // 矢印キー押下時はデフォルトのカーソルキー押下イベントをキャンセル
    e.preventDefault();
  }

  // キーバインドで行いたい処理をここに書く
}
// 初期状態はキーバインドなし
window.onkeydown = window.onkeyup = avoidKeyEvent;

 
var evInputStart = new Event('InputStart');
window.addEventListener("InputStart"function(e) {
  window.onkeydown = window.onkeyup = avoidKeyEvent;
});
var evInputEnd = new Event('InputEnd');
window.addEventListener("InputEnd"function(e) {
  window.onkeydown = window.onkeyup = dispatchKeyEvent;
});

 

①独自イベントを2つ作成(new Event

②それぞれのイベントリスナで、キーダウン、キーアップに対する関数を設定する

(一方はキーバインド処理をする関数を指定し、他方はキーバインドなしの関数を指定する)

キーバインドを有効にしたいときは、有効な関数を設定したイベントリスナのイベントをディスパッチ(window.dispatchEvent)する

④無効にしたいときは以下略

 

上の例では、あるエレメントのshowイベント発火時にキーバインドを無効にし、hideイベント発火時にキーバインドを有効にしている。

※そのままコピペしても動かないので注意。