librerias examples ejemplos javascript jquery

javascript - examples - jquery ui



Alternativa jQuery para document.activeElement (5)

¿Es el evento .blur() lo que estás buscando?

Lo que quería hacer es averiguar cada vez que el usuario se compromete con un elemento de ENTRADA o TEXTAREA y establecer un indicador de variable en verdadero ... y establecer ese indicador en falso inmediatamente después de que el usuario ya no esté comprometido con ellos (es decir, He hecho clic fuera de los elementos de ENTRADA / TEXTAREA).

Usé la función docuemnt.ready de jQuery para agregar el atributo onclick a mi elemento de cuerpo y asignarlo a mi función getActive ().

El código para la función getActive () es el siguiente:

function getActive() { activeObj = document.activeElement; var inFocus = false; if (activeObj.tagName == "INPUT" || activeObj.tagName == "TEXTAREA") { inFocus = true; } }

Realmente me gustaría continuar con el proyecto dentro del marco jQuery, pero parece que no puedo encontrar una manera de lograr la misma lógica anterior utilizando la sintaxis JUST JQuery.


Desea enfocar y desenfocar los controladores de eventos. Por ejemplo...

var inFocus = false; $(''input, textarea'').focus(function() { inFocus = true; }); $(''input, textarea'').blur(function() { inFocus = false; });

Estoy bastante seguro de que una coma te dará entrada O un área de texto, pero obtendrás la idea si eso no funciona.


Para la pregunta original sobre averiguar si el elemento enfocado actualmente es alguno de esos elementos de entrada del usuario, a continuación debería funcionar:

function isInputElementInFocus() { return $(document.activeElement).is(":input"); }

Conceptualmente, no me gusta este enfoque para el caso genérico en el que escuchas eventos globales (como strocks clave) y tratas de decidir si estos deben ser manejados por tu controlador global o ignorados porque están destinados a otra persona. La razón por la que no me gusta porque no es seguro para el futuro y también quién sabe qué otra cosa puede ser alguien además de elementos de entrada.

Otra idea más robusta pero difícil de implementar es probar si el evento está destinado a un elemento que tiene un índice de tabulación> = 0. Los elementos de entrada tienen un valor de tabIndex === 0 configurado de manera predeterminada para que se vuelva más o menos similar al enfoque anterior. Puede comprobarlo fácilmente mediante event.target.tabIndex >= 0 sin necesidad de confiar en document.activeElement .

El resultado final (si desea ser genérico) es que también debe asegurarse de que el elemento event.target no se encuentre en otra rama en la jerarquía DOM ni que haya alguien más entre event.currentTarget y event.target que tenga tabIndex >= 0 . Entiendes la idea: esto puede volverse turbio, pero pensé en anotarlo si alguien más necesita una solución genérica.


Puedes hacer algo como esto:

var focusItem = null; $(''input, textarea'').focus( function() { focusItem = this; });


function getActive(){ return $(document.activeElement).is(''input'') || $(document.activeElement).is(''textarea''); }