2

我正在使用 jQuery。有带有 ID 和附加 .blur() 事件的输入字段。当我试图找出焦点所在的新项目时,问题就来了:

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

但是这个$("*:focus").attr('id')是未定义的。如何检测焦点在哪里?

4

2 回答 2

4

看起来模糊/焦点事件是在新元素实际获得: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 回答