Javascript 为什么document.activeElement在使用Firefox的Mac上产生不同的结果

Javascript 为什么document.activeElement在使用Firefox的Mac上产生不同的结果,javascript,macos,firefox,Javascript,Macos,Firefox,我有以下代码 document.addEventListener('submit',函数(e){ e、 预防默认值(); console.log(document.activeElement); }); 输入文本: 这听起来确实像是一个bug,您在打开时做了正确的事情 如果您的代码完全需要依赖于此,那么一种黑客方法就是跟踪activeElement :active伪类设置正确,因此我们可以利用它来跟踪activeElement 我们可以在我们试图跟踪的元素上添加一个非常快速的CSS转换,然后

我有以下代码

document.addEventListener('submit',函数(e){
e、 预防默认值();
console.log(document.activeElement);
});

输入文本:

这听起来确实像是一个bug,您在打开时做了正确的事情

如果您的代码完全需要依赖于此,那么一种黑客方法就是跟踪activeElement

:active
伪类设置正确,因此我们可以利用它来跟踪activeElement

我们可以在我们试图跟踪的元素上添加一个非常快速的CSS转换,然后监听它们的
转换和
事件,以便处理它们何时变为活动或停止活动。可以通过检查它们是否与转换结束时的
:active
伪类匹配来检查它们的状态

然后,当您需要检索
document.activeElement
时,您只需首先检查自己的
activeElement
变量是否包含某些内容,否则只能返回到浏览器报告的内容

此外,由于此bug似乎只影响按钮元素,因此我们只能在这些元素上添加此hack:

let-activeElement;
文档.添加的列表器('transitionend',函数(e){
//如果目标当前处于活动状态,则它是activeElement
activeElement=e.target.matches(':active')?e.target:null;
});
文件.附录列表器(“提交”,功能(e){
e、 预防默认值();
//首先尝试获取我们自己的activeElement
//否则默认为文档的一个
log('in submit',activeElement | | document.activeElement);
});
//要显示默认值,此选项仍然有效
document.addEventListener('click',函数(e){
console.log('in click',activeElement | | document.activeElement);
});
输入,按钮{/*仅目标按钮UI*/
过渡:不透明度0.000001s;/*非常快的过渡*/
}
输入:激活,按钮:激活{
不透明度:0.999;/*几乎不可见的属性*/
}

输入文本:
提交