我正在使用jQuery。存在具有ID和附加的.blur()事件的输入字段。当我试图找出焦点所在的新项目时,问题出现了:
$("#"+field).blur(function()
{
console.log ($(this).attr('id')+' -> '+$("*:focus").attr('id'));
}
但 $(“*:focus”)。attr('id')未定义。如何检测焦点在哪里?
答案 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 强>