JavaScript FocusOut - 获取获得焦点的元素

标签 javascript focusout

FocusOut 事件被引发时,您如何知道哪个元素获得焦点

正确的方法似乎是使用事件的 relatedTarget 属性。但是,这似乎不适用于所有浏览器:

  • 在谷歌浏览器中,它有效
  • 在 Firefox 和 Internet Explorer 中,relatedTarget 为空
  • 在 Safari 中,relatedTarget 属性甚至不存在

我找到了一个仅在 IE 中有效的解决方法(使用 document.activeElement),但我想知道是否没有一个已证明在所有主要浏览器中都有效的通用解决方案

虽然我可以找到类似的问题和答案,但我还没有找到真正适用于所有浏览器的解决方案。

编辑:下面的例子说明了我的意思。

代码:

document.getElementById('text1').addEventListener('focusout', function(e) {
  // At this point, I want to know which element is receiving the focus (i.e. text2)
  console.log(e.relatedTarget); // works in Chrome
  console.log(document.activeElement); // works in IE
  // both do not work in Firefox or Safari
});
<input id="text1" type="text" value="first" />
<input id="text2" type="text" value="second" />

最佳答案

我有一个针对 Firefox 的假设和解决方法。 document.activeElement 似乎有效。然后 focusout 命中,所以它被删除。到 focusin 命中时(或者可能紧接着),将再次有一个 focused 元素。但是在 out 和 in 之间没有任何焦点,因此没有元素被报告为事件的。

我的解决方法是愚蠢的 setTimeout hack。 setTimeout( function() {console.log(document.activeElement)}, 1); 可靠地为我提供了一个事件元素。诚然,我只在一台机器上进行了测试,并且测试了 90 秒,但这是迄今为止我发现的最好的结果。

关于JavaScript FocusOut - 获取获得焦点的元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22879572/

相关文章:

javascript - JQuery 下一个选择器或类似的东西

javascript - 页面转换后在 jQuery Mobile 1.4.3 中打开弹出窗口

javascript - javascript 中 "with"语句的使用,在一些极少数情况下

javascript - div失去焦点时如何关闭div?

javascript - jquery 将事件添加到板中的单元格中

javascript - 当日期选择器在 x-editable 中隐藏/可见时显示/隐藏按钮

JavaScript (JQuery) 更改参数名称

javascript - 如何在 Ember js 组件中触发焦点移出

jquery - CKEditor 聚焦

javascript - jQuery: Firefox focusout 事件