Come si cancella l'attenzione in javascript?


159

So che non dovrebbe essere così difficile, ma non sono riuscito a trovare la risposta su Google.

Voglio eseguire un pezzo di javascript che cancella la messa a fuoco da qualunque elemento sia acceso senza sapere in anticipo su quale elemento si concentra. Deve funzionare su Firefox 2 e su browser più moderni.

C'è un buon modo per farlo?


cosa significa focus chiaro? - è lo stesso di sfocatura?
plodder

3
Voglio farlo in modo che nessun elemento nel browser sia attivo.
Andres,

Risposte:


170

Risposta: document.activeElement

Per fare quello che vuoi, usa document.activeElement.blur()

Se devi supportare Firefox 2, puoi anche usare questo:

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

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

8
Se Firefox 2, con una quota del browser dello 0,66%, è un rompicapo ... Ho una soluzione, che è nella mia risposta modificata.
jps

21
Nel 2013, la quota del browser di Firefox 2 è sostanzialmente inferiore allo 0,66% e il semplice document.activeElement.blur()è il modo migliore per ottenere questo effetto.
Chowey,

88

.focus()e poi .blur()qualcos'altro arbitrario sulla tua pagina. Poiché solo un elemento può avere lo stato attivo, viene trasferito su quell'elemento e quindi rimosso.


C'è un modo per rendere un elemento invisibile che ha il focus?
Andres,

1
Non sono un esperto del modo migliore per farlo; ma potresti certamente posizionarlo fuori dallo schermo o al di fuori dei limiti di un overflow: clipelemento in stile. Ma potresti semplicemente usare un campo già esistente nella pagina. O creane uno solo per lo scopo e rimuoverlo di nuovo.
Kevin Reid,

Penso che l'impostazione dello stato attivo su un elemento fuori dallo schermo forzerà uno scorrimento su quell'elemento. Tuttavia, è possibile creare un elemento invisibile per lo scopo. Detto questo, alcuni browser potrebbero avere difficoltà a rimuovere il cursore. Sfocatura () probabilmente funzionerebbe meglio. È ancora possibile ottenere le chiavi con un gestore eventi keyup (keydown).
Alexis Wilke,

5
Questa risposta non è aggiornata e non si applica nell'anno 2017. Usa invece activeElement, come in stackoverflow.com/a/2520670/39808
Paul Fisher

Funziona ancora, solo più a lungo e sposta l'attenzione (che potrebbe interferire con la navigazione TAB) Inoltre non è immediatamente evidente cosa dovrebbe essere "qualcos'altro arbitrario".
user202729

50
document.activeElement.blur();

Funziona in modo errato su IE9: sfoca l'intera finestra del browser se l'elemento attivo è il corpo del documento. Meglio controllare per questo caso:

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

È vero, ma oggi quasi nessuno usa più IE9.
Donald Duck,

18

Nessuna delle risposte fornite qui è completamente corretta quando si utilizza TypeScript, poiché è possibile che non si conosca il tipo di elemento selezionato.

Questo sarebbe quindi preferito:

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

Scoraggerei inoltre l'uso della soluzione fornita nella risposta accettata, poiché la sfocatura risultante non fa parte delle specifiche ufficiali e potrebbe interrompersi in qualsiasi momento.


6
È divertente vedere come una domanda che ho fatto nel 2010 continui ad avere una risposta in evoluzione.
Andres,

2

dummyElem.focus () dove dummyElem è un oggetto nascosto (ad es. ha zIndex negativo)?


0

Puoi chiamare window.focus ();

ma spostare o perdere il focus è destinato a interferire con chiunque usi il tasto tab per aggirare la pagina.

è possibile ascoltare il codice chiave 13 e rinunciare all'effetto se si preme il tasto Tab.


-3

Con jQuery è solo: $(this).blur();


2
Questa è una vecchia risposta, quindi potresti saperlo ormai, ma ci sono due motivi per cui questa risposta non si applica. 1. Presuppone che il PO utilizza jquery, 2. thisdeve essere l'elemento focalizzato, mentre la domanda afferma esplicitamente che il PO non conosce in anticipo l'elemento focalizzato.
Brandon,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.