今日はJavascript

ようやく今週頭からの改修にメドがつきテストを開始してすぐ別な問題が発生。JavascriptのonBlurで出しているalertダイアログの無限ループ。そしてまた自分は最終電車
無限ループの条件は案外簡単なのだが、通常の運用ではなかなか発生しないと思われるもの。テキストボックスの文字列をフォーカスを失った時点でチェックして不正な文字が含まれていたらエラーダイアログを表示してそのテキストボックスにフォーカスを戻すというものなのだが、初期値がすでに不正な可能性があったりする。
入力値が不正な時、他のそういうテキストボックスに移動すると問題は発生する。確か昔にも経験した気がする。原理は簡単で、object.focus()でフォーカスを移動しようとすると、移動元のオブジェクトでonBlurイベントが発生してしまう。するとまた同じチェックがなされて……というわけだ。
日報を書くのも忘れて対策を調べ、ActiveElementだとかグローバル変数による排他制御だとか、イベントハンドラの動的変更だとか捜し回ったがどうも改善なし。
そういえばonBlurイベントって返り値falseにすると…とかってなかったっけか。