【js】firefoxでfocusイベントが動かない


概要

キー入力があった際に、フォーカスを変えるということをしたかったのですが、安直にはいかなかったたので回避策を書く。(考察しながら書いてますが、間違っている部分もあるかと思います。)

どうしてこうなるのか

firefoxではイベント中に別のイベントを呼び出すことができない模様。
そのため、onkeydown()のイベント中で別のイベントのfocus()を呼び出すことができない。

回避策

setTimeout(function(){
  セレクタ名.focus()
},0);

onkeydown()のイベントからfocus()の部分をsettimeoutを使うことで非同期処理にしてあげ、onkeydown()からfocus()が発生する状況を擬似的に回避してあげる。
settimeoutには、0を指定しているが失敗する場合は50や100などにしてfocus()が発生するタイミングを遅らせてあげる。

参考資料