我知道这应该不难,但是我在谷歌上找不到答案。
我想要执行一段JavaScript代码,可以将焦点从当前元素上清除,而不需要预先知道焦点所在的元素。它必须能够在Firefox 2以及现代浏览器上运行。
有什么好的方法可以做到这一点吗?
我知道这应该不难,但是我在谷歌上找不到答案。
我想要执行一段JavaScript代码,可以将焦点从当前元素上清除,而不需要预先知道焦点所在的元素。它必须能够在Firefox 2以及现代浏览器上运行。
有什么好的方法可以做到这一点吗?
要实现您想要的效果,请使用 document.activeElement.blur()
如果需要支持 Firefox 2,您也可以使用以下方法:
function onElementFocused(e)
{
if (e && e.target)
document.activeElement = e.target == document ? null : e.target;
}
if (document.addEventListener)
document.addEventListener("focus", onElementFocused, true);
document.activeElement.blur()
是实现此效果的最佳方法。 - chowey属性“blur”在类型“Element”上不存在。ts(2339)
- YTG.focus()
然后在页面上选择其他任意元素进行 .blur()
。由于只能有一个元素拥有焦点,因此焦点会转移到该元素,然后被移除。
overflow: clip
样式元素的边界之外。但你也可以使用页面上已经存在的字段。或者为此创建一个字段,然后再将其删除。 - Kevin Reiddocument.activeElement.blur();
在IE9上运行错误 - 如果活动元素是文档主体,则会模糊整个浏览器窗口。最好检查此情况:
if (document.activeElement != document.body) document.activeElement.blur();
属性'blur'在类型'Element'上不存在。ts(2339)
的错误提示。 - YTG在使用TypeScript时,这里提供的所有答案都不完全正确,因为您可能不知道所选元素的类型。
因此,以下代码是更好的选择:
if (document.activeElement instanceof HTMLElement)
document.activeElement.blur();
此外,我建议不要使用被接受答案中提供的解决方案,因为生成的模糊效果不是官方规范的一部分,可能会在任何时候停止支持。
as
类型转换,可以得到类似的解决方案:(document.activeElement as HTMLElement).blur()
。 - Timdocument.activeElement?.blur && document.activeElement.blur()
。 - fooboredif(document.activeElement instanceof HTMLElement)
中,以避免在非HTML DOM节点上崩溃。 - Raine Revere我更喜欢使用document.activeElement?.blur && document.activeElement.blur()
。
我正在使用vue和react:在我的情况下,我可以在组件之间的任何地方调用它,它将取消焦点。
'blur'
在 Element
上不存在。所以没有 instanceof
的版本的 Element.blur
类型保护。document.activeElement && "blur" in document.activeElement && document.activeElement.blur && typeof document.activeElement.blur === "function" && document.activeElement.blur();
- undefineddummyElem.focus()是指在一个隐藏对象(例如,具有负zIndex值)上设置焦点吗?
你可以调用window.focus();
但是移动或失去焦点必定会干扰使用Tab键浏览页面的用户。
你可以监听按键码13,如果按下Tab键则放弃效果。
使用jQuery只需要这样:$(this).blur();
this
需要是具有焦点的元素,而问题明确指出 OP 事先不知道具有焦点的元素。 - Brandon