Von selbst, document.activeElement
kann immer noch ein Element zurückgeben, wenn das Dokument nicht fokussiert ist (und somit nichts in dem Dokument ist konzentriert!)
Sie puede dieses Verhalten wollen, oder es puede keine Rolle (z.B. innerhalb einer keydown
Ereignis), aber wenn Sie wissen müssen, dass etwas tatsächlich fokussiert ist, können Sie zusätzlich prüfen document.hasFocus()
.
Das folgende Beispiel zeigt das fokussierte Element an, wenn es eines gibt, oder aber null
.
var focused_element = null;
if (
document.hasFocus() &&
document.activeElement !== document.body &&
document.activeElement !== document.documentElement
) {
focused_element = document.activeElement;
}
Um zu prüfen, ob ein spezifisch Element den Fokus hat, ist es einfacher:
var input_focused = document.activeElement === input && document.hasFocus();
Um zu prüfen, ob alles fokussiert ist, ist es wieder komplexer:
var anything_is_focused = (
document.hasFocus() &&
document.activeElement !== null &&
document.activeElement !== document.body &&
document.activeElement !== document.documentElement
);
Anmerkung zur Robustheit : In dem Code, in dem es die Prüfungen gegen document.body
y document.documentElement
Dies liegt daran, dass einige Browser eines dieser Symbole zurückgeben oder null
wenn nichts im Mittelpunkt steht.
Es wird nicht berücksichtigt, ob die <body>
(oder vielleicht <html>
) hatte eine tabIndex
Attribut und damit könnte tatsächlich konzentriert werden . Wenn Sie eine Bibliothek oder etwas anderes schreiben und wollen, dass es robust ist, sollten Sie das wahrscheinlich irgendwie handhaben.
Hier ist ein ( schwer airquotes) "Einzeiler"-Version, um das fokussierte Element zu erhalten, das ist konzeptionell komplizierter denn man muss über Kurzschlüsse Bescheid wissen, und das passt natürlich nicht in eine Zeile, vorausgesetzt, man will, dass es lesbar ist.
Ich werde dieses Buch nicht empfehlen. Aber wenn du ein 1337 hax0r bist, idk... es ist da.
Sie könnten auch die || null
Teil, wenn es Ihnen nichts ausmacht, sich false
in einigen Fällen. (Sie können immer noch null
wenn document.activeElement
es null
) :
var focused_element = (
document.hasFocus() &&
document.activeElement !== document.body &&
document.activeElement !== document.documentElement &&
document.activeElement
) || null;
Um zu prüfen, ob ein bestimmtes Element fokussiert ist, können Sie alternativ pourrait Ereignisse zu verwenden, aber dieser Weg erfordert die Einrichtung (und möglicherweise den Abbau), und das ist wichtig, einen Ausgangszustand annimmt :
var input_focused = false;
input.addEventListener("focus", function() {
input_focused = true;
});
input.addEventListener("blur", function() {
input_focused = false;
});
Sie könnten die Annahme des Anfangszustands durch die Verwendung des ereignislosen Weges beheben, aber dann könnten Sie stattdessen auch einfach das verwenden.
4 Stimmen
Hier ist ein Bookmarklet, das das Element mit dem Fokus in der console.log protokolliert: github.com/lingtalfi/wo-ist-focus-bookmarklet
1 Stimmen
Sie können verwenden
find-focused-element
Paket: npmjs.com/package/find-focused-element1 Stimmen
Bei mir funktioniert das Bookmarklet nicht so, wie ich es erwähnt habe.
5 Stimmen
Siehe ein gutes Beispiel für
document.activeElement
wird hier verwendet: stackoverflow.com/a/64176168/1599699