JQuery :当浏览器未聚焦时聚焦
JQuery :focus when the browser ain't focused
在不考虑性能的情况下,我总是认为由 $(":focus")
编辑的 jquery 对象 return 等同于 $(document.activeElement)
。
但是,如果您闯入浏览器调试器并计算 $(":focus")
,您将不会获得任何元素,而 $(document.activeElement)
仍将是 return 焦点元素。我在考虑某种观察者效应问题,但如果您将焦点设置在浏览器之外也是如此。
根据 jquery documentation,焦点选择器应该“选择当前焦点的元素”。由于没有提及浏览器焦点,我想知道这是预期的行为还是应该作为错误报告。
如果您想尝试这种行为,我创建了一个 JsFiddle 示例。当您将注意力从输入上移开时(在表单中、控制台中或其他应用程序中),您会看到 $(":focus")
如何反应。
The :focus selector is allowed on elements that accept keyboard events or other user inputs.
并且document.activeElement
可以包含页面中的任何或几乎任何元素
查看 :focus
选择器的源代码:
"focus": function( elem ) {
return elem === document.activeElement
&& (!document.hasFocus || document.hasFocus())
&& !!(elem.type || elem.href || ~elem.tabIndex);
}
所以为了返回元素,elem
必须等于 document.activeElement
,文档必须有焦点,元素必须有 type
,href
, 或 tabIndex
属性.
两者不等价
编辑
在您的 fiddle 中,当您从输入中移除焦点时,document.activeElement
变为 body
,文档是否具有焦点并不重要。
在不考虑性能的情况下,我总是认为由 $(":focus")
编辑的 jquery 对象 return 等同于 $(document.activeElement)
。
但是,如果您闯入浏览器调试器并计算 $(":focus")
,您将不会获得任何元素,而 $(document.activeElement)
仍将是 return 焦点元素。我在考虑某种观察者效应问题,但如果您将焦点设置在浏览器之外也是如此。
根据 jquery documentation,焦点选择器应该“选择当前焦点的元素”。由于没有提及浏览器焦点,我想知道这是预期的行为还是应该作为错误报告。
如果您想尝试这种行为,我创建了一个 JsFiddle 示例。当您将注意力从输入上移开时(在表单中、控制台中或其他应用程序中),您会看到 $(":focus")
如何反应。
The :focus selector is allowed on elements that accept keyboard events or other user inputs.
并且document.activeElement
可以包含页面中的任何或几乎任何元素
查看 :focus
选择器的源代码:
"focus": function( elem ) {
return elem === document.activeElement
&& (!document.hasFocus || document.hasFocus())
&& !!(elem.type || elem.href || ~elem.tabIndex);
}
所以为了返回元素,elem
必须等于 document.activeElement
,文档必须有焦点,元素必须有 type
,href
, 或 tabIndex
属性.
两者不等价
编辑
在您的 fiddle 中,当您从输入中移除焦点时,document.activeElement
变为 body
,文档是否具有焦点并不重要。