Альтернатива jQuery для document.activeElement
То, что я хотел сделать, это выяснить, когда пользователь взаимодействует с элементом INPUT или TEXTAREA и устанавливает флаг переменной в true... и устанавливает этот флаг как false сразу же после того, как пользователь больше не взаимодействует с ними (т.е. они вышли из элементов INPUT/TEXTAREA).
Я использовал функцию jQuery documentemnt.ready, чтобы добавить атрибут onclick в свой элемент body и назначить его моей функции getActive().
Код функции getActive() выглядит следующим образом:
function getActive()
{
activeObj = document.activeElement;
var inFocus = false;
if (activeObj.tagName == "INPUT" || activeObj.tagName == "TEXTAREA")
{
inFocus = true;
}
}
Мне бы очень хотелось сохранить проект с помощью рамки jQuery, но не может найти способ выполнить ту же самую логику выше, используя синтаксис JUST jQuery.
Ответы
Ответ 1
Вам нужны обработчики событий фокуса и размытия. Например...
var inFocus = false;
$('input, textarea').focus(function() {
inFocus = true;
});
$('input, textarea').blur(function() {
inFocus = false;
});
Я уверен, что запятая получит ваш ввод или текстовое поле, но вы получите идею, если это не отключится
Ответ 2
function getActive(){
return $(document.activeElement).is('input') || $(document.activeElement).is('textarea');
}
Ответ 3
Для исходного вопроса о том, чтобы выяснить, является ли текущий сфокусированный элемент каким-либо из этих элементов пользовательского ввода, ниже должно работать:
function isInputElementInFocus() {
return $(document.activeElement).is(":input");
}
Концептуально мне не нравится этот подход для общего случая, когда вы слушаете глобальные события (например, ключевые строчки) и пытаетесь решить, следует ли их обрабатывать вашим глобальным обработчиком или игнорировать, потому что он предназначен для кого-то другого. Причина, по которой мне это не нравится, потому что это не будущее в безопасности, а также кто знает, что еще кто-то может быть помимо элементов ввода.
Еще одна более надежная, но сложная задача - проверить, имеет ли событие значение для элемента с tabIndex >= 0. Элементы ввода имеют tabIndex === 0, заданные по умолчанию, поэтому он становится более или менее похожим на описанный выше подход, Вы можете легко проверить это на event.target.tabIndex >= 0
без необходимости полагаться на document.activeElement
.
Полученный здесь (если вы хотите быть общим) заключается в том, что вам также необходимо убедиться, что элемент event.target не находится ни в одной ветки в иерархии DOM, ни кто-то другой между event.currentTarget и event.target, который имеет tabIndex >= 0
. Вы получаете идею: это может стать мутным, но я просто подумал записать его, если кто-то еще нуждается в общем решении.
Ответ 4
Вы можете сделать что-то вроде этого:
var focusItem = null;
$('input, textarea').focus( function() {
focusItem = this;
});
Ответ 5
Iis .blur()
событие, которое вы ищете?
Ответ 6
Попробуй это::
$(document).on("click",function(){
alert(event.target);
});