¿Cómo desenfoco todo enfocándome en el documento?

2 minutos de lectura

usando jquery/javascript

¿Es: $(documento).enfoque()?

avatar de usuario
Andy E.

los .focus() El método en un elemento envuelto en jQuery se vinculará al onfocus evento si se pasa una función como primer parámetro, o desencadenar controladores de eventos adjuntos sin parámetro.

No estoy seguro de por qué está tratando de hacer lo que está tratando de hacer, pero si está tratando de desenfocar el elemento actualmente activo, sin importar qué elemento sea, puede usar:

document.activeElement.blur();

Sin embargo, esto no se recomienda, ya que hacerlo restablecerá el orden de tabulación y podría molestar a los usuarios que navegan con el teclado.

  • Mejor pon un cheque como if ('activeElement' in document) primero, ya que no es compatible con todos los navegadores.

    – bobince

    2 de abril de 2010 a las 22:24

  • @bobince: lo agregó como medida de precaución. activeElement es compatible con las últimas versiones de Firefox, Opera, WebKit e IE 6 a 8 y también es parte de la especificación HTML5, por lo que esperamos que sea ampliamente compatible de todos modos.

    – Andy E.

    2 abr 2010 a las 22:33

  • document.activeElement es un Element tipo, no HTMLElementpor lo que no es técnicamente compatible blur(). TypeScript no permitirá que esto se use.

    – vanidoso

    29 sep 2018 a las 15:02

  • un uso para esto sería cerrar una superposición con una entrada, simplemente no desea mantenerlo enfocado después de cerrar la superposición, porque escribirá sin entender por qué es

    – 5alidshammout

    17 de junio a las 4:40

  • @vaindil en ese caso, puedes hacer (document.activeElement as HTMLElement). No creo que haya ningún elemento que pueda tomar el foco que no tenga un focus() método.

    – Andy E.

    17 de junio a las 13:03

avatar de usuario
vanidoso

ACTUALIZAR: En Typescript, solo debes enviar a HTMLElement como esto:

(document.activeElement as HTMLElement).blur();
// or
(<HTMLElement>document.activeElement).blur();

La respuesta original está abajo.


La respuesta aceptada no funcionará en TypeScript porque document.activeElement es un Element tipo, no HTMLElementpor lo que no es técnicamente compatible blur(). El siguiente método es un poco hacky pero funciona correctamente.

Adaptado de esta respuesta:

const tmp = document.createElement('input');
document.body.appendChild(tmp);
tmp.focus();
document.body.removeChild(tmp);

  • no es removeChild() falta un argumento?

    – RTYX

    7 oct 2019 a las 14:39

  • Lo es, solo se arregló y también se agregó una nota que solo debe enviar a HTMLElement.

    – vanidoso

    7 oct 2019 a las 15:41

  • funciona con mecanografiado si declara const activeElement: any = document.activeElement; me parece menos raro

    – usuario6292372

    31 de agosto de 2020 a las 23:49


$().method() dispara a los oyentes asociados con ese método. Si necesita llamar a funciones en elementos dom, indexe el objeto jQuery.

es decir

$(document)[0].focus()

Aunque ¿por qué no usarías simplemente document.focus es probablemente una pregunta que vale la pena responder.

Si el objetivo es eliminar el foco en cualquier elemento de campo de formulario, puede usar esto:

$(':focus').blur();

Si no tiene jQuery, puede usar JavaScript simple:

let elem = document.querySelector(':focus');
if(elem ) {
  elem .blur();
}

¿Ha sido útil esta solución?

Esta web utiliza cookies propias y de terceros para su correcto funcionamiento y para fines analíticos y para mostrarte publicidad relacionada con sus preferencias en base a un perfil elaborado a partir de tus hábitos de navegación. Al hacer clic en el botón Aceptar, acepta el uso de estas tecnologías y el procesamiento de tus datos para estos propósitos. Configurar y más información
Privacidad