0

多数の div 要素を含む Web ページがあります。このページは、非常に遅いセットトップ ボックスに接続されたテレビで実行されます。このボックスは、組み込みの Opera ブラウザ バージョン 9.50 を実行します。私が持っている唯一の入力デバイスは、STB のリモート コントロールです。マウスはありません。この Web ページ (テレビ) では、マウスがないため、ユーザーはリモコンの上下左右の矢印キーを使用して、ある div から別の div に移動します。今、私は誰かがそれらをあまりにも速く押したときにこれらのキープレスを「デバウンス」しようとしています! キープレスイベントを制御できますが、フォーカスイベントを防ぐことができません。とにかくキープレスハンドラーで何をしても、フォーカスイベントが発生するようです。

問題は、現在の要素の keypress ハンドラー内の別の要素にフォーカスが移らないようにするにはどうすればよいかということです。keypress event.preventDefault() を呼び出して (keypress ハンドラーから) false を返しても、フォーカスが次の要素に移動することは妨げられません。言い換えれば、とにかくイベントは「バブルアップ」します。どうすればそれを防ぐことができますか? 私も tabIndex プロパティを変更して遊んだことがありますが、それは役に立ちません。

何か案は。ありがとう。

4

1 に答える 1

1

クリック イベントからのフォーカスを防ぎたい場合はe.preventDefault()mousedownハンドラーから行う必要があります。これは物理的なイベントではないため、ハンドラーから実行することはできません。これはclick単なる抽象化でmousedownあり、mouseup

タブがフォーカスを変更するのを防ぎたい場合はe.preventDefault()、keydown ハンドラーから行う必要があります。は物理的なイベントではなく、とイベントの抽象化であるkeypressため、 からは実行できません(キーを押したままにするとキープレスが複数回発生することに注意してください)。keypresskeydownkeyup

http://jsfiddle.net/gtwhF/

$('#a').on('mousedown', function(e) {
    e.preventDefault();
})

$('#a').on('keydown', function(e) {
  if (e.keyCode == 9) { 
      e.preventDefault(); 
  } 
})
于 2013-04-16T19:04:42.767 に答える