全局元素焦点监听器
Javascript: Global Element Focus Listener
我正在尝试设置侦听所有焦点事件的侦听器。特别是,我试图倾听任何时候输入或文本框获得关注。根据一些研究,实现这一目标的广泛接受的方法是这样的:
document.body.onfocus = function(event) {
//Check the event.target for input/textbox
//Do something
};
但是document.body.onfocus似乎从来没有触发过。我认为这可能是因为文档实际上从未接收焦点,所以我尝试:
document.body.focus();
初始"设置"焦点,但这也不起作用。
关于如何在所有输入/文本框上侦听焦点事件而不直接在元素本身上实际设置事件的任何想法?请只使用香草javascript,我不使用框架。
根据接受的答案,这里是一些工作代码:
var focusHandler = function(event) {
var type = event.target.nodeName.toLowerCase();
if(type == 'input' || type == 'textarea') {
//Do something
}
};
document.body.addEventListener('focus', focusHandler, true); //Non-IE
document.body.onfocusin = focusHandler; //IE
由于一些事件(焦点,模糊,变化)不会冒泡,我建议您尝试Event Capturing
代替。首先,onfocus
将不适用于此,因此您必须使用addEventListener
,您可以在第三个参数中指定使用的委托模式。查看MDN以了解addEventListener
的使用。
关于委托焦点事件的更多信息,请参阅本文。
focus
事件不会从元素冒泡到它们的祖先元素,因此您不能使用事件委托(将其挂接在body
上并为body
的所有后代查看它)来检测它。
有一个更新的事件,focusin
(微软的创新,现在也可以在其他浏览器中使用),它会冒泡,所以这可能适合你,这取决于你想要支持哪个浏览器。
相关文章:
- keyup事件处理程序更改焦点不适用于快速键入
- 单击时将焦点更改为元素
- 后焦点更改为IE 11中的地址栏,而不是转移到表单中的下一个控件
- Javascript全局onclick监听器
- 在IE9中的输入字段中输入焦点最近按钮
- 如何在td元素中添加监听器
- Javascript游戏输入失去焦点
- ExtJS网格单元格编辑器,防止焦点松动问题
- 检查元素是如何获得焦点的
- angularjs移除焦点上的活动类并添加到下一个项目
- Don'不允许将焦点集中在自动完成的选择上
- 监听器必须是一个函数
- 当点击另一件事时,将焦点设置为一件事
- 文本框焦点上的自动完成菜单
- 如何检测哪个窗口是焦点
- 可以't从Youtube IFrame更改焦点
- 在jAlert之后设置焦点
- 在文本区域的焦点上分割渐变
- 使用Redux和React添加焦点更改类
- 全局元素焦点监听器