.focus()| jqueryAPI 2.2 中文手册- AspRain.cn 致力于Web开发技术翻译整理

jQuery API 2.2.0

.focus()

分类:事件 > 表单事件 | 表单

返回: jQuery

.focus( handler )

描述:把某个事件处理函数绑定到JavaScript事件“focus”上,或在某个元素上触发该事件。

加入于: 1.0
.focus( handler )
  • handler
    类型:FunctionEvent eventObject )
    一个函数,在每次事件被触发时执行它。
加入于: 1.4.3
.focus( [eventData ], handler )
  • eventData
    类型:Anything
    一个对象,它包含了要传递给事件处理函数的数据。
  • handler
    类型:FunctionEvent eventObject )
    一个函数,在每次事件被触发时执行它。
加入于: 1.0
.focus()

该签名不接受任何参数。

  • 在前两个变体中,该方法是.on( "focus", handler )的简写,在第三种变体中,是.trigger( "focus" )的简写。
  • 当一个元素获得焦点时,focus事件被发送到该元素。该事件潜在地只适合于一些有限的元素集合,比如说表单元素(<input><select>等等)以及链接(<a href>)。在最近的浏览器版本中,这个事件扩展到包括所有的元素类型,只要显式地设置元素的tabindex属性。一个元素可以通过键盘命令获得焦点,比如说Tab键,或者通过鼠标在元素上点击获得焦点。
  • 带焦点的元素,通常被浏览器以一些方式高亮,比如说用点点线包围该元素。焦点用来确定哪个元素是每一个接收键盘相关的事件的。

试图把焦点设置到一个隐藏的元素上,会导致Internet Explorer中的一个错误。要小心,只能在可见的元素上使用.focus()。要想运行一个元素的获得焦点事件处理函数,而不在元素上设置焦点,请使用.triggerHandler( "focus" )来代替.focus()

举个例子,设想下面的HTML:

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

事件处理函数可以绑定到第一个输入字段上:

$( "#target" ).focus(function() {
  alert( "Handler for .focus() called." );
});

现在点击第一个字段,或者别的字段上轻角尺它,显示这条提醒:

Handler for .focus() called.

我们可以在别的元素被点击时触发该事件:

$( "#other" ).click(function() {
  $( "#target" ).focus();
});

在代码执行之后,点击“Trigger the handler”将也会跳出这条消息。

focus事件不能在Internet Explorer中冒泡。因此,依赖于focus事件传播的脚本不能跨浏览器一致性起作用。然而,自从jQuery 1.4.2,jQuery通过在它的委托方法.live().delegate()中把focus映射到focusin事件,变通地解决了这个限制。

其它说明

  • 因为.focus()方法只是.on( "focus", handler )的简写,所以可以利用.off("focus")来分离它。

示例

引发聚焦:

<!doctype html>
<html lang="en">
<head>
  <meta charset="utf-8">
  <title>focus demo</title>
  <style>
  span {
    display: none;
  }
  </style>
  <script src="https://code.jquery.com/jquery-1.10.2.js"></script>
</head>
<body>
 
<p><input type="text"> <span>focus fire</span></p>
<p><input type="password"> <span>focus fire</span></p>
 
<script>
$( "input" ).focus(function() {
  $( this ).next( "span" ).css( "display", "inline" ).fadeOut( 1000 );
});
</script>
 
</body>
</html>

演示结果

要想阻止用户在文本输入框中打字,只要:

$( "input[type=text]" ).focus(function() {
  $( this ).blur();
});

要想在网页打开时光标聚集在一个还id“login”的登录框上,只要:

$( document ).ready(function() {
  $( "#login" ).focus();
});

如果网页上不能运行示例,请点击http://www.asprain.cn/jQueryAPI/focus.htm查看示例。

如果你觉得本文档对你有用,欢迎给翻译作者支付宝打赏,支持翻译作者源源不断翻译更多有用的技术文档。