document.activeElement的jQuery替代方案
我想要做的是弄清楚用户何时使用INPUT或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; }}
我真的很想通过jQuery框架来保持项目,但似乎无法找到使用JUST jQuery语法完成上述相同逻辑的方法。
您需要焦点和模糊事件处理程序。 例如…
var inFocus = false; $('input, textarea').focus(function() { inFocus = true; }); $('input, textarea').blur(function() { inFocus = false; });
我很确定一个逗号会让你输入OR textarea,但是你知道如果它没有成功
function getActive(){ return $(document.activeElement).is('input') || $(document.activeElement).is('textarea'); }
对于关于确定当前聚焦元素是否是这些用户输入元素中的任何一个的原始问题,下面应该有效:
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
。 你明白了这个问题:这可能会变得模糊不清,但我只想在其他人需要通用解决方案的情况下记下来。
你可以这样做:
var focusItem = null; $('input, textarea').focus( function() { focusItem = this; });
你正在寻找的.blur()
事件是什么?