¿Cómo obtener el elemento enfocado con jQuery?


Respuestas:


740
// Get the focused element:
var $focused = $(':focus');

// No jQuery:
var focused = document.activeElement;

// Does the element have focus:
var hasFocus = $('foo').is(':focus');

// No jQuery:
elem === elem.ownerDocument.activeElement;

¿Cual deberías usar? citando los documentos de jQuery :

Al igual que con otros selectores de pseudo-clase (aquellos que comienzan con un ":"), se recomienda preceder: enfocar con un nombre de etiqueta o algún otro selector; de lo contrario, el selector universal ("*") está implícito. En otras palabras, lo desnudo $(':focus')es equivalente a $('*:focus'). Si está buscando el elemento actualmente enfocado, $ (document.activeElement) lo recuperará sin tener que buscar en todo el árbol DOM.

La respuesta es:

document.activeElement

Y si quieres un objeto jQuery que envuelva el elemento:

$(document.activeElement)

2
pero espera, ¿cómo obtengo el elemento que tiene el cursor?
— Dave

@dave. ¿Qué quieres decir con "tiene el cuidado" ? enfocado? el raton esta en el?
— Gdoron está apoyando a Mónica

bueno, aquí está mi situación: cuando hago clic en un elemento en particular, quiero colocar un carácter en el último elemento de texto de entrada enfocado. Básicamente, el elemento que tenía el foco último o justo antes de hacer clic en ese elemento en particular.
— Dave

1
@dave. No se puede hacer. Creo que solo IE tiene esta característica, pero ahora estás haciendo una pregunta diferente, deberías hacerlo en una nueva pregunta.
— Gdoron está apoyando a Mónica el

3
Me gusta cómo usaste el nombre de la variable con prefijo $ $focused, ya que supongo que haces eso para denotar que var es un objeto jquery. TYVM.
— Valamas


6

He probado dos formas en Firefox, Chrome, IE9 y Safari.

(1) $(document.activeElement)Funciona como se espera en Firefox, Chrome y Safari.

(2) $(':focus')Funciona como se espera en Firefox y Safari.

Me moví al mouse para ingresar 'nombre' y presioné Enter en el teclado, luego intenté obtener el elemento enfocado.

(1) $(document.activeElement)devuelve el input: text: name como se esperaba en Firefox, Chrome y Safari, pero devuelve input: submit: addPassword en IE9

(2) $(':focus')devuelve input: text: name como se esperaba en Firefox y Safari, pero nada en IE

<form action="">
    <div id="block-1" class="border">
        <h4>block-1</h4>
        <input type="text" value="enter name here" name="name"/>            
        <input type="button" value="Add name" name="addName"/>
    </div>
    <div id="block-2" class="border">
        <h4>block-2</h4>
        <input type="text" value="enter password here" name="password"/>            
        <input type="submit" value="Add password" name="addPassword"/>
    </div>
</form>

5

Prueba esto:

$(":focus").each(function() {
    alert("Focused Elem_id = "+ this.id );
});

Sí, es por eso que este ciclo tendrá solo una iteración. alerta es solo para demostrar el ejemplo. Si tiene esta variable, puede hacerlo todo con el elemento que desee.
— Adil Malik

¿Cómo es posible enfocar más de un elemento?
— Andreas Furster

@AndreasFurster tienes razón. Siempre habrá una sola iteración en este ciclo. Puede que esta no sea la mejor manera de lograr el objetivo, pero funciona.
— Adil Malik

Vea la respuesta aceptada para saber por qué esta es la peor / menos eficiente forma de hacerlo. (innecesario .eachno soportar)
— Brad Kent

2

¿Cómo es que nadie ha mencionado ..

document.activeElement.id

Estoy usando IE8 y no lo he probado en ningún otro navegador. En mi caso, lo estoy usando para asegurarme de que un campo tenga un mínimo de 4 caracteres y esté enfocado antes de actuar. Una vez que ingresa el 4to número, se dispara. El campo tiene una identificación de 'año'. Estoy usando..

if( $('#year').val().length >= 4 && document.activeElement.id == "year" ) {
    // action here
}

1

$(':focus')[0] te dará el elemento real.

$(':focus') le dará una variedad de elementos, generalmente solo un elemento está enfocado a la vez, por lo que esto es mejor si de alguna manera tiene múltiples elementos enfocados.



0

Si desea confirmar si el foco está con un elemento, entonces

if ($('#inputId').is(':focus')) {
    //your code
}
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.