Альтернатива 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);
    });