如何使用jquery在页面上找到焦点元素?

时间:2011-10-19 10:45:55

标签: jquery

我想尝试这个例子,但它不起作用。为什么?

<div id="test"></div>
<script>
    $('#test').focus();
    alert($("*:focus").attr("id"))
</script> 

5 个答案:

答案 0 :(得分:7)

请注意,正如其他人所提到的,默认情况下并非所有元素都可以聚焦。您必须向其添加tabindex属性才能使这些元素可以聚焦:

<div id="test" tabindex="0"></div>
<script>
    $('#test').focus();
    alert($("*:focus").attr("id"))
</script> 

应用tabindex属性后,您的原始代码才有效。请参阅this working example


在纯JavaScript中,document.activeElement应返回焦点元素(如果有)。它还可以返回一个活动的元素,但不会聚焦。处理它的最好方法是检查元素是否聚焦:

function getFocussedElement() {
    var el;
    if ((el = document.activeElement) && el != document.body)
        return el;
    else
        return null;
}

值得一提的是,这种方法应该是much faster而不是使用选择器进行查询。请注意activeElement不是任何标准的一部分,但所有主流浏览器都支持它。

答案 1 :(得分:0)

根据浏览器的不同,div不能接受焦点。把它改成一个输入,你很高兴。

<input  id="test"></input >
<script>
    $('#test').focus();
    alert($("*:focus").attr("id"))
</script> 

根据this answer,这完全取决于浏览器:

  

我们唯一的标准是DOM Level 2 HTML,根据该标准   只有具有focus()方法的元素才是HTMLInputElement,   HTMLSelectElement,HTMLTextAreaElement和HTMLAnchorElement。这个   值得注意的是省略了HTMLButtonElement和HTMLAreaElement。

答案 2 :(得分:0)

正如@lonesomeday所说,你不能专注于div

这是一个输入元素而不是http://jsfiddle.net/xsp83/

的示例

答案 3 :(得分:0)

这样就够了吗?

$("input").focus(function(){
  var f = $(this).attr("id");
  console.log(f);
});

答案 4 :(得分:0)

我不认为div元素能够从焦点()docs获得焦点 -

  

焦点事件在获得焦点时发送到元素。这个事件   隐含地适用于有限的一组元素,例如形式   元素(<input><select>等)