2

jQueryで作業しています。ID と添付された .blur() イベントを含む入力フィールドがあります。問題は、焦点が当てられている非常に新しいアイテムを見つけようとしたときに発生します。

$("#"+field).blur(function()
{
 console.log ($(this).attr('id')+' -> '+$("*:focus").attr('id'));
}

しかし、この$("*:focus").attr('id')は未定義です。焦点がどこにあるかを検出する方法は?

4

2 に答える 2

4

:focus新しい要素が実際に疑似クラスをアタッチする前に、blur/focus イベントが発生したように見えます。これはかなり興味深いです。このフィドルで私が意味することの証明

それで疑問が生じます-なぜあなたはこれをやろうとしていますか? :)

あなたの問題に対する私の解決策(そのように絶対に必要な場合)は、次のようにすることです:FIDDLE

于 2012-07-31T14:16:58.283 に答える
1

あなたが抱えている問題は、フォーカスのあるアイテムを取得しようとするが、それを早くすることです。だからあなたがすることはこれです:

blur event gets fired
you try to get the element which has got focus
new element gets focus

確かに最も簡単な方法は、フォーカスのためにイベントリスナーを追加することですが、それをしたくない場合は、これがトリックになります:

$("input").blur(function() {
    setTimeout(function() {
        console.log($(":focus"));
    }, 1);
});​​

ライブデモ

アップデート

タイムアウトを設定すると、常にパフォーマンスに依存するため、実際には最良の解決策は次のとおりです。

var sTempId;
$("input")
    .focus(function() {
        if (sTempId)
            console.log ( sTempId + " -> " + $(this).attr("id") );
        sTempId = $(this).attr("id");
    });​

ライブデモ

于 2012-07-31T14:17:10.227 に答える