可以使用 contains() 方法判断表单容器是否包含当前焦点元素,需先获取表单 DOM 节点和 document.activeElement,再校验焦点元素有效性并调用 form.contains(focused) 返回布尔结果。

可以用 contains() 方法判断表单容器是否包含当前获得焦点的元素,关键在于:获取表单容器 DOM 节点、获取 document.activeElement,再调用容器的 contains() 进行检查。
获取表单容器和当前焦点元素
确保你有对表单容器的引用(比如通过 id 或 querySelector),同时注意 document.activeElement 在页面加载初期或无焦点时可能返回 body 或 html 元素,需做基本校验:
const form = document.getElementById('myForm');const focused = document.activeElement;- 建议加一层判断:
if (focused && focused !== document.body && focused !== document.documentElement)
调用 contains() 判断归属关系
contains() 是 Element 方法,返回布尔值。它检查调用者是否包含指定节点(含自身):
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
-
form.contains(focused)—— 如果focused是表单内任意后代(包括 input、textarea、select、甚至其子元素如 span 内的可编辑内容),返回true - 注意:如果
focused就是表单本身,form.contains(form)也返回true - 如果焦点在表单外(如按钮、导航栏、其他 div),结果为
false
常见使用场景示例
比如在表单失焦或全局按键事件中检查焦点是否仍在表单内:
立即学习“Java免费学习笔记(深入)”;
- 监听
keydown(如按 Esc 时只关闭弹窗当焦点不在表单内):if (event.key === 'Escape' && !form.contains(document.activeElement)) { closeDialog(); } - 在表单
blur事件中无法直接捕获,建议改用focusout并结合事件委托或定时检测 - 注意:
form.contains(null)会报错,务必先确保focused存在且为 Node 类型
不复杂但容易忽略细节,核心就是三步:取容器、取焦点、调用 contains 判断。

















