Javascript 从onBlur事件获取新聚焦的元素(如果有)。

Javascript 从onBlur事件获取新聚焦的元素(如果有)。,javascript,jquery,Javascript,Jquery,我需要在执行onBlur处理程序时获取新聚焦的元素(如果有) 我该怎么做 我可以想出一些糟糕的解决方案,但没有什么不涉及设置超时的 请参考: 不幸的是,当模糊事件发生时新元素没有被聚焦,所以这将报告正文。所以你必须用标志和焦点事件来破解它,或者使用setTimeout $("input").blur(function() { setTimeout(function() { console.log(document.activeElement); }, 1); }

我需要在执行onBlur处理程序时获取新聚焦的元素(如果有)

我该怎么做

我可以想出一些糟糕的解决方案,但没有什么不涉及设置超时的

请参考:

不幸的是,当模糊事件发生时新元素没有被聚焦,所以这将报告正文。所以你必须用标志和焦点事件来破解它,或者使用setTimeout

$("input").blur(function() {
    setTimeout(function() {
        console.log(document.activeElement);
    }, 1);
});​
很好


如果不使用setTimeout,您可以使用:


为什么不使用focusout事件


relatedTarget属性将为您提供接收焦点的元素。

这正是我所担心的。如果没有非setTimeout解决方案,我将在几天内接受这个答案。@chrisdew我可以用focus事件做一些事情,但我相信这将比简单的超时更复杂。
(function() {
    var blurred = false,
        testIs = $([document.body, document, document.documentElement]);
    //Don't customize this, especially "focusIN" should NOT be changed to "focus"
    $(document).on("focusin", function() {

        if (blurred) {
            var elem = document.activeElement;

            blurred = false;

            if (!$(elem).is(testIs)) {
                doSomethingWith(elem); //If we reached here, then we have what you need.
            }

        }

    });
    //This is customizable to an extent, set your selectors up here and set blurred = true in the function
    $("input").blur(function() {
        blurred = true;
    });

})();​

//Your custom handler
function doSomethingWith(elem) {
     console.log(elem);
}