我想尝试这个例子,但它不起作用。为什么?
<div id="test"></div>
<script>
$('#test').focus();
alert($("*:focus").attr("id"))
</script>
答案 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>
等)