我需要在执行 onBlur 处理程序时获取新聚焦的元素(如果有)。
我怎样才能做到这一点?
我能想到一些糟糕的解决方案,但没有什么不涉及 setTimeout。
我需要在执行 onBlur 处理程序时获取新聚焦的元素(如果有)。
我怎样才能做到这一点?
我能想到一些糟糕的解决方案,但没有什么不涉及 setTimeout。
参考它:
不幸的是,当模糊事件发生时,新元素没有聚焦,所以这将报告正文。因此,您将不得不使用标志和焦点事件来破解它,或者使用 setTimeout。
$("input").blur(function() {
setTimeout(function() {
console.log(document.activeElement);
}, 1);
});
工作正常。
没有 setTimeout,你可以使用这个:
(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);
}
为什么不使用 focusout 事件?https://developer.mozilla.org/en-US/docs/Web/Events/focusout
relatedTarget 属性将为您提供正在接收焦点的元素。