Jquery“$(”*:focus“)”是空的。如何检测焦点在哪里?

时间:2012-07-31 14:05:10

标签: jquery html css

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

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

$(“*:focus”)。attr('id')未定义。如何检测焦点在哪里?

2 个答案:

答案 0 :(得分:3)

在新元素实际获得附加:focus伪类之前,似乎会触发blur / focus事件。这很有意思。在fiddle

中证明我的意思

所以这就引出了一个问题 - 你为什么要这样做? :)

我的解决方案解决您的问题(如果您绝对需要这样做)就是这样做:FIDDLE

答案 1 :(得分: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);
});​​

<强> Live DEMO

更新

所以实际上最好的解决方案如下:因为如果设置超时,它总是取决于性能:

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

<强> Live DEMO