Tek başına, document.activeElement
belge odaklanmamışsa (ve böylece belgedeki hiçbir şey odaklanmazsa) bir öğeyi döndürebilir !
Sen olabilir davranışı istemek, ya da olabilir önemli değil (örneğin bir mesafede keydown
olay), ama aslında odaklanmış bir şeyler bilmek gerekiyorsa, fazladan kontrol edebilirsiniz document.hasFocus()
.
Aşağıdakiler, varsa odaklanmış öğeyi verecektir null
.
var focused_element = null;
if (
document.hasFocus() &&
document.activeElement !== document.body &&
document.activeElement !== document.documentElement
) {
focused_element = document.activeElement;
}
Belirli bir öğenin odaklanıp odaklanmadığını kontrol etmek için daha basit:
var input_focused = document.activeElement === input && document.hasFocus();
Bir şeyin odaklanıp odaklanmadığını kontrol etmek için tekrar daha karmaşıktır:
var anything_is_focused = (
document.hasFocus() &&
document.activeElement !== null &&
document.activeElement !== document.body &&
document.activeElement !== document.documentElement
);
Bozulmazlık Not : Bu kontroller karşı kodunda document.body
ve document.documentElement
bazı tarayıcılar Bunlardan birini iade çünkü ya, bu null
hiçbir şey odaklandığında.
Bu eğer dikkate almaz <body>
(ya da belki <html>
) bir vardı tabIndex
dolayısıyla niteliği ve aslında odaklanmış olabilir . Bir kütüphane ya da başka bir şey yazıyorsanız ve sağlam olmasını istiyorsanız, muhtemelen bunu bir şekilde ele almalısınız.
İşte odaklanmış öğeyi almanın ( ağır hava tırnakları) "tek astarlı" bir versiyonu, bu da kısa devre hakkında bilgi sahibi olmanız gerektiğinden kavramsal olarak daha karmaşıktır ve biliyorsunuz, açıkçası bir çizgiye uymuyor, okunabilir olmasını istiyorum.
Bunu tavsiye etmeyeceğim. Ama eğer 1337 hax0r, idk ... orada. Bazı durumlarda almayı sakıncası yoksa
da || null
parçayı çıkarabilirsiniz false
. (Hala alabilir null
eğer document.activeElement
olduğunu null
):
var focused_element = (
document.hasFocus() &&
document.activeElement !== document.body &&
document.activeElement !== document.documentElement &&
document.activeElement
) || null;
Belirli bir öğenin odaklanmış olup olmadığını kontrol etmek için, alternatif olabilir olayları kullanabilirsiniz, ancak bu şekilde kurulum gerektirir (ve potansiyel olarak söküm) ve önemlisi bir ilk devlet varsayar :
var input_focused = false;
input.addEventListener("focus", function() {
input_focused = true;
});
input.addEventListener("blur", function() {
input_focused = false;
});
İlk durum varsayımını olaysız yolu kullanarak düzeltebilirsiniz, ancak bunun yerine bunu da kullanabilirsiniz.