document.activeelement返回body

时间:2012-07-02 19:18:09

标签: html tabindex

<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元素。

3 个答案:

答案 0 :(得分:6)

在离开旧元素和输入新元素之间,活动元素确实是文档/正文本身。

演示:http://jsfiddle.net/u3uNP/

答案 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

JsFiddle:https://jsfiddle.net/PseudoNinja/8oq0c1by/