Javascript document.activeElement的jQuery备选方案

Javascript document.activeElement的jQuery备选方案,javascript,jquery,Javascript,Jquery,我想做的是找出用户何时处理输入或TEXTAREA元素,并将变量标志设置为true。。。并在用户不再与他们接触后立即将该标志设置为false(即,他们单击了INPUT/TEXTAREA元素) 我使用jQuery的docuemnt.ready函数将onclick属性添加到body元素中,并将其分配给getActive()函数 getActive()函数的代码如下所示: function getActive() { activeObj = document.activeElement; var

我想做的是找出用户何时处理输入或TEXTAREA元素,并将变量标志设置为true。。。并在用户不再与他们接触后立即将该标志设置为false(即,他们单击了INPUT/TEXTAREA元素)

我使用jQuery的docuemnt.ready函数将onclick属性添加到body元素中,并将其分配给getActive()函数

getActive()函数的代码如下所示:

function getActive() { activeObj = document.activeElement; var inFocus = false; if (activeObj.tagName == "INPUT" || activeObj.tagName == "TEXTAREA") { inFocus = true; } } 函数getActive() { activeObj=document.activeElement; var-inFocus=false; if(activeObj.tagName==“输入”| | activeObj.tagName==“文本区域”) { inFocus=true; } }
我真的很想继续使用jQuery框架进行项目,但似乎无法找到一种仅使用jQuery语法来实现上述相同逻辑的方法。

Iis您要查找的事件?

您想要焦点和模糊事件处理程序。例如

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

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

我很确定逗号会让您输入或输入文本区域,但如果结果不理想,您可以这样做:

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

对于最初关于确定当前关注的元素是否是这些用户输入元素中的任何一个的问题,下面应该可以解决:

function isInputElementInFocus() {
    return $(document.activeElement).is(":input");
}
从概念上讲,我不喜欢这种方法用于一般情况,在这种情况下,您正在侦听全局事件(如键strock),并试图确定这些事件是应该由您的全局处理程序处理,还是应该被忽略,因为它是针对其他人的。我之所以不喜欢它,是因为它对未来不安全,而且谁知道除了输入元素之外,其他人还能做什么

另一个更健壮但很难实现的想法是测试事件是否针对tabIndex>=0的元素。默认情况下,输入元素设置了tabIndex==0,因此它或多或少类似于上述方法。您可以通过
event.target.tabIndex>=0
轻松检查这一点,而无需依赖
document.activeElement


这里的问题(如果您想成为泛型的话)是您还需要确保event.target元素既不在DOM层次结构中的另一个分支中,也不在event.currentTarget和event.target之间存在
tabIndex>=0
的其他元素。你明白了:这可能会变得模糊,但我只是想在其他人需要通用解决方案时记下它。

只是为了澄清,“focusItem”将表示输入或TEXTAREA DOM对象?它将表示专注的人,无论其类型如何。所以它可以是一个输入或一个TEXTAREA,我把它放在其中,但当用户开始在INPUT或TEXTAREA元素中键入时,它似乎不会被调用。。。我没有意识到在document.ready函数之外使用这些函数会让JS将这些事件绑定到基本上不存在的元素,因为DOM尚未加载。
function isInputElementInFocus() {
    return $(document.activeElement).is(":input");
}