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