如何检查我的 Element ID 是不是有焦点? [复制]
Posted
技术标签:
【中文标题】如何检查我的 Element ID 是不是有焦点? [复制]【英文标题】:How can I check if my Element ID has focus? [duplicate]如何检查我的 Element ID 是否有焦点? [复制] 【发布时间】:2016-07-25 15:24:29 【问题描述】:假设我有以下 div 在满足特定条件后获得焦点:
<div id="myID" tabindex="-1" >Some Text</div>
我想创建一个处理程序来检查该 div 是否具有焦点,并且当它评估为 true/焦点在 div 上时,执行一些操作(在下面的示例中,打印控制台日志):
if (document.getElementById('#myID').hasFocus())
$(document).keydown(function(event)
if (event.which === 40)
console.log('keydown pressed')
);
我在控制台中收到一条错误消息:
TypeError: 无法读取 null 的属性“hasFocus”
知道我在这里做错了什么吗?也许是我传递 div Id 的方式?
【问题讨论】:
见话题***.com/questions/497094/… 不知道为什么这被标记为重复(另一个主题提出了一个完全不同的问题),但今天我们可以使用matches()
方法。 var el = document.getElementById('myElement'); el.matches(':focus'); // If it has focus, it will return true.
【参考方案1】:
将document.activeElement
与您要检查焦点的元素进行比较。如果它们相同,则元素被聚焦;否则,它不是。
// dummy element
var dummyEl = document.getElementById('myID');
// check for focus
var isFocused = (document.activeElement === dummyEl);
hasFocus
是document
的一部分; DOM 元素没有这样的方法。
另外,document.getElementById
不会在myID
的开头使用#
。改变这个:
var dummyEl = document.getElementById('#myID');
到这里:
var dummyEl = document.getElementById('myID');
如果您想改用 CSS 查询,可以使用 querySelector
(和 querySelectorAll
)。
【讨论】:
为什么不只是document.activeElement.id=='myID'
?【参考方案2】:
使用document.activeElement
应该可以。
P.S getElementById("myID")
不是 getElementById("#myID")
【讨论】:
也可以改用document.querySelector("#myID")
【参考方案3】:
如果你想使用 jquery $("..").is(":focus")
。
你可以看看这个stack
【讨论】:
【参考方案4】:这是一个块元素,为了让它能够获得焦点,你需要给它添加tabindex
属性,如
<div id="myID" tabindex="1"></div>
Tabindex 将允许该元素获得焦点。使用tabindex="-1"
(或者实际上,完全摆脱该属性)来禁止这种行为。
然后你可以简单地
if ($("#myID").is(":focus")) ...
或者使用
$(document.activeElement)
如前所述。
【讨论】:
还要指出getElementById
中的错字。
谢谢。我已经分配了一个 -1 的 tabindex。 $(document.activeElement) 方法有效,但它并不特定于我正在检查焦点的 div ('myID')。它在任何 div 有焦点时触发 if 语句,而不仅仅是我关心的那个 ('myID')
jQuery 方法根本不起作用
@KunalOjha 是的,只要有活动元素,它就会触发,检查它是否是您需要的元素是您的工作。所以,你会这样做 if ($(document.activeElement).is('#myID')) ... 另外,当你将 tabindex 设置为 -1 时,disables
是那个特定元素上的焦点事件,您需要将其设置为 1 或任何其他数字。
还是不行:/【参考方案5】:
在脚本中编写以下代码并添加 jQuery 库
var getElement = document.getElementById('myID');
if (document.activeElement === getElement)
$(document).keydown(function(event)
if (event.which === 40)
console.log('keydown pressed')
);
谢谢...
【讨论】:
以上是关于如何检查我的 Element ID 是不是有焦点? [复制]的主要内容,如果未能解决你的问题,请参考以下文章
如何检查 IQueryable<T>.Element 类型是不是为接口
WinForms:如何确定窗口是不是不再活动(没有子窗口有焦点)?