使用jQuery设置元素的焦点时似乎存在问题。它显然不会触发元素上设置的:focus CSS属性。
例如,在我的CSS中,我有:
div.item1:focus { border:2px solid red; }
在我的 jQuery 中,我有:$("div.item1").focus();
焦点已设置,但元素上没有应用红色边框。
:focus
选择器.. 参见CSS2 规范
:focus
伪类应用于元素具有焦点(接受键盘事件或其他形式的文本输入)时。
你可以这样做:
.hoverclass { border:2px solid red; }
$("div.item").hover(function() {
$(this).addClass('hoverclass')
},function() {
$(this).removeClass('hoverclass')
});
这段代码使用了 .hover()
、.addClass()
和 .removeClass()
方法。
focus()
只能用于表单元素和链接,如果您尝试在其他类型的元素上使用它,则无法正常工作。
有关更多信息,请参见jQuery文档中的focus()部分。
来自手册:
当元素获得焦点时,会向该元素发送焦点事件。该事件隐式适用于一组有限的元素,例如表单元素(
<input>
,<select>
等)和链接(<a href>
)。在最新的浏览器版本中,可以通过显式设置元素的tabindex属性来扩展事件以包括所有元素类型。元素可以通过键盘命令(如Tab键)或鼠标单击元素来获得焦点。
前往jQuery的focus()页面查看:
当元素获得焦点时,将向该元素发送焦点事件。此事件隐式适用于一组有限的元素,例如表单元素(
<input>
、<select>
等)和链接(<a href>
)。在最近的浏览器版本中,可以通过显式设置元素的tabindex属性来扩展事件以包括所有元素类型。元素可以通过键盘命令(如Tab键)或单击元素来获得焦点。
前往PPK关于浏览器焦点的研究页面:
看起来所有浏览器都通过了tabindex测试。
$("div.item1").focus(function(){
$("div.item1").css("border","2px solid red");
});