tag name encontrar elemento javascript jquery cursor element caret

javascript - name - ¿Cómo conseguir el elemento enfocado con jQuery?



jquery name selector (6)

Usando jQuery, ¿cómo puedo obtener el elemento de entrada que tiene el enfoque del cursor (cursor)?

O, en otras palabras, ¿cómo determinar si una entrada tiene el enfoque del cursor?


¿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 uso para asegurarme de que un campo tenga un mínimo de 4 caracteres y esté enfocado antes de actuar. Una vez que ingresas el 4to número, se dispara. El campo tiene un id de ''año''. Estoy usando..

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


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í en el mouse para ingresar ''nombre'' y presioné Intro en el teclado, luego intenté obtener el elemento enfocado.

(1). $(document.activeElement) devuelve la entrada: texto: nombre como se esperaba en Firefox, Chrome y Safari, pero devuelve la entrada: enviar: 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>


Prueba esto:

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


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

$('':focus'') le dará una variedad de elementos, generalmente solo se enfoca un elemento a la vez, por lo que solo es mejor si de alguna manera tiene varios elementos enfocados.


$( document.activeElement )

Lo recuperará sin tener que buscar en todo el árbol DOM como se recomienda en la documentación de jQuery


// 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 pseudoclases (aquellos que comienzan con ":"), 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, el $('':focus'') desnudo $('':focus'') es equivalente a $(''*:focus'') . Si está buscando el elemento enfocado actualmente, $ (document.activeElement) lo recuperará sin tener que buscar en todo el árbol DOM.

La respuesta es:

document.activeElement

Y si quieres un objeto jQuery envolviendo el elemento:

$(document.activeElement)