<input id="text1" tabindex="1" onblur="invokeFunc()"/>
<input id="text2" tabindex="2" onblur="invokeFunc()"/>
function invokeFunc(){
// ajax request
alert(document.activeElement);
// this returns body element in firefox, safari and chrome.
}
我正在尝试使用正确的tabindex设置在文本框上设置焦点onblur。
当我调用javascript函数onblur并尝试获取document.activeelement时,它总是返回我的body元素而不是焦点所在的active元素。
答案 0 :(得分:6)
在离开旧元素和输入新元素之间,活动元素确实是文档/正文本身。
答案 1 :(得分:0)
@ThiefMaster 解释了原因,我想添加一个获取新焦点元素的解决方案:
使用focusout
代替onblur
,然后使用relatedTarget
属性:
const inputs = document.getElementsByTagName('input');
for (var i = 0; i < inputs.length; ++i) {
inputs[i].addEventListener('focusout', (event) => {
console.log('newly focused element:', event.relatedTarget);
});
}
<input id="text1" tabindex="1" />
<input id="text2" tabindex="2" />
答案 2 :(得分:-2)
要解决此问题,请将document.activeElement
替换为this
。