ど素人から毛を生やす。<延>

onblurからのalartで再focusしたらバグる問題

Web > javascript 2017年6月6日(最終更新:20日前)

どもです。
まこと久々のjs関係の更新です。

テキストボックスをonblurで入力チェック、
望んだものでなければalart(もしくはconfirm)を呼び、再びfocusで入力し直させる。

一般サイトだと時代遅れのブツではありますが、
裏側ならまだ現役のalart。
こういったことは、やりたくなることがあると思います。

が、

alert("警告メッセージ");
元のテキストボックス.focus();

他の動作であれば正常に動くのですが、focusに限ってはこれバグるようです。

しかも、ブラウザによってバグの内容が異なり、
firefoxならフォーカスが移動してくれない程度で済むのですが、
cromeだと閉じても閉じても延々とalartが発動し続けるという悪夢が。

で、どうしてこんな現象が起きるのか。

推測ですが、alartを閉じるとフォーカスの処理が自動的に発生するのではないかと。
つまり、alartによるフォーカスを外す処理と、フォーカスをつける命令が同時発生。
フォーカスをつけられたと思ったらalartの処理で外れるので無限ループ。

アカン。(-"-)

しかし、フォーカスの処理が同時発生するのがバグの元なら、
フォーカスの処理を同時に行わせなければいい。

ということで、対処法はこちら。

alert("警告メッセージ");
  setTimeout(function(){ 
    元のテキストボックス.focus(); 
    元のテキストボックス.select(); 
  }, 1); 

setTimeoutでミリ秒ずらし。
これでおkです。


参考サイト:SE奮闘記 とあるシステムエンジニアのメモ帳

この記事は役に立ちましたか?
  • _(:3」∠)_ 面白かった  (0)
  • (・∀・) 参考になった (0)
  • (`・ω・´) 役に立った (0)