2010-03-26 12 views
96

Sé que esto no debería ser tan difícil, pero no pude encontrar la respuesta en Google.¿Cómo se borra el foco en javascript?

Quiero ejecutar un trozo de javascript que borrará el foco de cualquier elemento en el que esté sin saber de antemano en qué elemento está enfocado. Tiene que funcionar en Firefox 2 y en navegadores más modernos.

¿Hay una buena manera de hacerlo?

+0

¿Qué significa enfoque claro? - ¿Es lo mismo que desenfoque? – plodder

+3

Quiero hacer que ningún elemento en el navegador tenga foco. – Andres

Respuesta

74

.focus() y luego .blur() algo más arbitrario en su página. Como solo un elemento puede tener el foco, se transfiere a ese elemento y luego se elimina.

+0

¿Hay alguna manera de hacer un elemento invisible que tenga foco? – Andres

+1

No soy un experto en la mejor forma de hacerlo; pero ciertamente podría posicionarlo fuera de la pantalla o fuera de los límites de un elemento de estilo 'overflow: clip'. Pero podrías usar un campo que ya existe en la página. O cree uno solo para este propósito y elimínelo nuevamente. –

+0

Creo que establecer el foco en un elemento fuera de la pantalla forzará un desplazamiento hacia ese elemento. Sin embargo, puede crear un elemento invisible para este propósito. Dicho esto, algunos navegadores pueden tener dificultades para eliminar el cursor. Just blur() probablemente funcione mejor. Aún puede obtener claves con un controlador de eventos de keyup (keydown). –

93

Respuesta: document.activeElement

--- ---- edición

Técnicamente: document.activeElement.blur()

---- ---- 2 editar

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

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

No funciona en Firefox 2.0. – Andres

+6

Si Firefox 2, con un 0,66% de uso compartido del navegador, es un factor decisivo ... Tengo una solución, que está en mi respuesta editada. – jps

+12

En 2013, la cuota de navegador de Firefox 2 es sustancialmente inferior al 0,66%, y el simple 'document.activeElement.blur()' es la mejor manera de lograr este efecto. – chowey

2

dummyElem.focus() donde dummyElem es un objeto oculto (por ejemplo, tiene un zIndex negativo)?

0

Puede llamar a window.focus();

pero mover o perder el foco está destinado a interferir con cualquiera que use la tecla de tabulación para desplazarse por la página.

puede escuchar el código clave 13, y renunciar al efecto si se presiona la tecla de tabulación.

30
document.activeElement.blur(); 

Funciona mal en IE9 - difumina toda la ventana del navegador si el elemento activo es el cuerpo del documento. Es mejor verificar este caso:

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