【JavaScript】onblurのあとfocusとselectが効かない

inputタグにonblurで入力チェックしたあと、入力したテキストボックスにフォーカスを戻したいときにハマったメモ。

IEだと普通にobj.focus()をやれば戻れるけど、FirefoxとかGoogle ChromeとかSafariだと戻らない。

そんなときはsetTimeoutを使えばいいらしい。

サンプルコード(数値チェックのisNumberは独自に定義)

<input type="text" onblur="txtCheckNumber(this)" />

function txtCheckNumber(objElement)
{
    var objJquery = $(objElement);
    if (!isNumber(objJquery.val())) {
        alert("数値を入力してください。");
        setTimeout(function(){
            objJquery.focus();
            objJquery.select();
        }, 1);
    }
}

jQueryオブジェクトに変換しているけど、DOMエレメントのまま

objElement.focus();

でも動くはず。