Javascript 在js中,你能检测到页面什么时候没有焦点吗?

Javascript 在js中,你能检测到页面什么时候没有焦点吗?,javascript,event-listener,Javascript,Event Listener,在我的页面上,我有多个文本框,需要其中至少一个框始终保持焦点。我是否可以调用一个js事件监听器来检测页面上什么都没有焦点,这样我就可以给它焦点了?您还可以在文档上附加一个focusout处理程序,它会在每次focusout事件出现时检查可聚焦的元素。然后,强制聚焦在模糊事件源以外的元素上(如果没有) 按评论编辑 如果您想知道标记列表中的元素是否已聚焦: function hasFocus(selector) { return Array .from(document.qu

在我的页面上,我有多个文本框,需要其中至少一个框始终保持焦点。我是否可以调用一个js事件监听器来检测页面上什么都没有焦点,这样我就可以给它焦点了?

您还可以在
文档
上附加一个
focusout
处理程序,它会在每次focusout事件出现时检查可聚焦的元素。然后,强制聚焦在模糊事件源以外的元素上(如果没有)


按评论编辑

如果您想知道标记列表中的元素是否已聚焦:

function hasFocus(selector) {
    return Array
        .from(document.querySelectorAll(selector))
        .some(function(el){
            return el === document.activeElement
        });
}

// usage 
console.log(hasFocus('input, select, textarea'))

请在此链接上查看我的解决方案:

加载页面时,第一个输入获得焦点。每次你点击出去。一个随机的输入可以获得焦点


默认情况下,模糊事件不会出现气泡。因此,通过将usecapture更改为true,使其冒泡起来

const inputs = document.querySelectorAll('input')

document.querySelector('input').focus()

document.addEventListener('blur', (e) => {
  console.log(e)
  if (e.isTrusted) {
    const random = Math.round(Math.random() * (inputs.length-1));
    console.log(random)
    Array.from(inputs)[random].focus()
  }
},true)

这回答了你的问题吗?“至少需要其中一个框才能始终保持焦点”——这是不可能的。只需在浏览器中选择地址栏,任何聚焦元素都将失去焦点。我目前的设置是,每当单击页面上的任何位置时,文本框都会获得焦点。但是,有许多按钮进行ajax调用,然后导致页面没有焦点。现在我可以转到每个ajax调用并在每个调用之后将焦点设置到框中,但我只是想知道是否有更简单的方法,让页面识别没有焦点,然后在本例中设置焦点。而不是
.filter(…).length>0
您可以使用
.some(…)
。默认情况下,模糊事件不会冒泡,请将useCapture更改为true或使用另一个事件“focusout”,为什么要关注随机元素?这对我来说没有太多意义…问题的要求是“至少有一个盒子始终有焦点”。我想这意味着一个随机输入需要被关注。