onBlur ハンドラーの実行中に、新しくフォーカスされた要素 (存在する場合) を取得する必要があります。
これどうやってするの?
私はいくつかのひどい解決策を考えることができますが、setTimeout を含まないものは何もありません。
onBlur ハンドラーの実行中に、新しくフォーカスされた要素 (存在する場合) を取得する必要があります。
これどうやってするの?
私はいくつかのひどい解決策を考えることができますが、setTimeout を含まないものは何もありません。
それを参照してください:
残念ながら、blur イベントが発生したときに新しい要素がフォーカスされていないため、body が報告されます。したがって、フラグとフォーカスイベントでハックするか、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);
}