Javascript'te odağı nasıl temizlersiniz?


159

Bunun o kadar da zor olmaması gerektiğini biliyorum, ancak Google'da cevabı bulamadım.

Odakın hangi öğeden önce odaklanacağını bilmeden odağı temizleyecek bir javascript parçası yürütmek istiyorum. Firefox 2 ve daha modern tarayıcılarda çalışmalıdır.

Bunu yapmanın iyi bir yolu var mı?


Net odak ne anlama geliyor? - bulanıklık ile aynı mı?
Mart'ta plodder

3
Bunu, tarayıcıdaki hiçbir öğenin odaklanmayacağı şekilde yapmak istiyorum.
Andres

Yanıtlar:


170

Cevap: document.activeElement

İstediğinizi yapmak için şunu kullanın: document.activeElement.blur()

Firefox 2'yi desteklemeniz gerekiyorsa, bunu da kullanabilirsiniz:

function onElementFocused(e)
{
    if (e && e.target)
        document.activeElement = e.target == document ? null : e.target;
} 

if (document.addEventListener) 
    document.addEventListener("focus", onElementFocused, true);

8
% 0.66 tarayıcı payına sahip Firefox 2, bir anlaşma kırıcıysa ... Düzenlenmiş cevabımda olan bir düzeltmem var.
Jps

21
2013 yılında, Firefox 2'nin tarayıcı payı% 0.66'dan daha azdır ve basit document.activeElement.blur(), bu etkiyi elde etmenin en iyi yoludur.
chowey

88

.focus()ve sonra .blur()sayfanızda isteğe bağlı başka bir şey. Yalnızca bir öğe odağa sahip olabileceğinden, o öğeye aktarılır ve ardından kaldırılır.


Odaklanmayan görünmez bir unsur yapmanın bir yolu var mı?
Andres

1
Bunu yapmanın en iyi yolu konusunda uzman değilim; ancak kesinlikle ekranın dışına veya overflow: clipstilize edilmiş bir öğenin sınırlarının dışına yerleştirebilirsiniz . Ancak, sayfada zaten var olan bir alanı kullanabilirsiniz. Ya da sadece amaç için bir tane oluşturun ve tekrar kaldırın.
Kevin Reid

Odağı ekran dışı bir öğeye ayarlamanın o öğeye kaydırmayı zorlayacağını düşünüyorum. Ancak, amaç için görünmez bir öğe oluşturabilirsiniz. Bununla birlikte, bazı tarayıcıların düzeltme çubuğunu kaldırmak için zor zamanları olabilir. Sadece blur () muhtemelen daha iyi çalışır. Yine de bir keyup (keydown) olay işleyicisiyle anahtarlar alabilirsiniz.
Alexis Wilke

5
Bu cevap güncel değil ve 2017 yılında geçerli değil. Bunun yerine activeElement kullanın, stackoverflow.com/a/2520670/39808
Paul Fisher

Hala çalışıyor, sadece daha uzun ve odağı hareket ettiriyor (TAB navigasyonunu engelleyebilir) Ayrıca "keyfi bir şey" ne olması gerektiği de belli değil.
user202729

50
document.activeElement.blur();

IE9'da yanlış çalışıyor - etkin öğe belge gövdesi ise tüm tarayıcı penceresini bulanıklaştırır. Bu vakayı kontrol etmek daha iyi:

if (document.activeElement != document.body) document.activeElement.blur();

Bu doğru, ama bugün neredeyse hiç kimse IE9 kullanmıyor.
Donald Duck

18

Burada verilen yanıtların hiçbiri, seçili öğe türünü bilmediğiniz için TypeScript kullanırken tamamen doğru değildir.

Bu nedenle bu tercih edilir:

if (document.activeElement instanceof HTMLElement)
    document.activeElement.blur();

Ayrıca, ortaya çıkan bulanıklaştırma resmi spesifikasyonun bir parçası olmadığından ve her an kırılabileceğinden, kabul edilen cevapta verilen çözümü kullanmaktan vazgeçireceğim.


6
2010 yılında sorduğum bir sorunun nasıl gelişmekte olan bir yanıtı olmaya devam ettiğini görmek çok eğlenceli.
Andres


0

Window.focus ();

ancak odağı taşımak veya kaybetmek, sayfada gezinmek için sekme tuşunu kullanan herkese müdahale etmek zorundadır.

13 numaralı anahtar kodunu dinleyebilir ve sekme tuşuna basılırsa efekti kaldırabilirsiniz.


-3

JQuery ile sadece: $(this).blur();


2
Bu eski bir cevaptır, bu yüzden şimdiye kadar öğrenebilirsiniz, ancak bu cevabın geçerli olmasının iki nedeni vardır. 1. OP'nin jquery kullandığını varsayar, 2. thissoru, OP'nin odaklanmış öğeyi önceden bilmediğini açıkça belirtirken, odaklanmış eleman olması gerekir.
Brandon
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.