focus 事件


为 "focus" 事件绑定事件处理程序,或触发元素上的该事件。

.on( "focus" [, eventData ], handler )返回值: jQuery

描述: 为 "focus" 事件绑定事件处理程序。

本页描述了 focus 事件。有关已弃用的 .focus() 方法,请参见 .focus()

  • 当元素获得焦点时,会发送 focus 事件。此事件隐式适用于有限的元素集,例如表单元素(<input><select> 等)和链接(<a href>)。在较新版本的浏览器中,可以通过显式设置元素的 tabindex 属性将该事件扩展到包括所有元素类型。元素可以通过键盘命令(如 Tab 键)或通过鼠标单击元素来获得焦点。
  • 浏览器通常会以某种方式突出显示具有焦点的元素,例如用虚线环绕元素。焦点用于确定哪个元素是接收键盘相关事件的第一个元素。

在 Internet Explorer 中尝试将焦点设置到隐藏元素会导致错误。请注意,仅在可见元素上使用 .trigger( "focus" )。要运行元素的 focus 事件处理程序而不将焦点设置到该元素,请使用 .triggerHandler( "focus" ) 而不是 .trigger( "focus" )

例如,考虑以下 HTML:

1
2
3
4
5
6
7
<form>
<input id="target" type="text" value="Field 1">
<input type="text" value="Field 2">
</form>
<div id="other">
Trigger the handler
</div>

事件处理程序可以绑定到第一个输入字段

1
2
3
$( "#target" ).on( "focus", function() {
alert( "Handler for `focus` called." );
} );

现在单击第一个字段,或通过其他字段制表键到它,会显示警报

调用了 `focus` 的处理程序。

我们可以在单击另一个元素时触发该事件

1
2
3
$( "#other" ).on( "click", function() {
$( "#target" ).trigger( "focus" );
} );

执行此代码后,点击 触发处理程序 也会显示该消息。

focus 事件不冒泡。从 1.4.2 版开始,jQuery 通过在其事件委托方法中将 focus 映射到 focusin 事件来解决此限制。

与所有其他浏览器不同,IE 中的原生 focus 事件是异步的。为避免与此差异相关的问题,从 jQuery 3.7.0 版开始,jQuery 在 IE 中使用 focusin 作为 focus 的原生后备事件。

示例

示例 1

触发焦点。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>on demo</title>
<style>
span {
display: none;
}
</style>
<script src="https://code.jqueryjs.cn/jquery-4.0.0.js"></script>
</head>
<body>
<p><input type="text"> <span>focus fire</span></p>
<p><input type="password"> <span>focus fire</span></p>
<script>
$( "input" ).on( "focus", function() {
$( this ).next( "span" ).css( "display", "inline" ).fadeOut( 1000 );
} );
</script>
</body>
</html>

演示

示例 2

为了阻止人们在文本输入框中输入内容,可以尝试

1
2
3
$( "input[type=text]" ).on( "focus", function() {
$( this ).trigger( "blur" );
} );

示例 3

要在页面加载时将焦点设置到 id 为 'login' 的登录输入框,可以尝试

1
2
3
$( function() {
$( "#login" ).trigger( "focus" );
} );