• 首页
  • vue
  • TypeScript
  • JavaScript
  • scss
  • css3
  • html5
  • php
  • MySQL
  • redis
  • jQuery
  • focus()

    为 JavaScript 的"focus"事件绑定一个处理函数,或者触发元素上的"focus"事件。

    .focus(handler(eventObject))
    • handler(eventObject)类型:Function()。每次事件触发时会执行的函数。
    .focus([eventData ], handler(eventObject))
    • eventData类型: Anything。一个对象,它包含的数据键值对映射将被传递给事件处理程序。
    • handler(eventObject)类型:Function()。每次事件触发时会执行的函数。
    .focus()
    • 这个方法不接受任何参数。

    这个函数的前两个用法是.bind('focus', handler)的快捷方式,第3个不带参数的用法是.trigger('focus')的快捷方式。

    当一个元素获得焦点时,focus事件被触发。此事件起初适用于有限的元素,比如表单元素(<input>,<select>等)和链接元素(<a href>)。在最近版本的浏览器中,该事件可以扩展到所有包括通过显式设置tabindex属性的元素类型。一个元素可以通过键盘命令获得焦点,如Tab键,或按鼠标点击的元素。

    获取焦点的元素,浏览器一般会以某种高亮方式来显示,比如,点线围绕的元素。该事件通常用于判断哪个元素是最先接收键盘相关事件的元素。

    试图将焦点设置到一个隐藏的元素在Internet Explorer中导致错误。请注意,.focus()只能在可见元素上使用。要在一个元素执行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>
    

    这个事件处理函数可以绑定到第一个 input field

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

    现在,如果点击第一个表单域或按tab键从其他地方切换到这个表单域,警报显示:

    Handler for .focus()called.

    我们可以点击另一个元素触发这个事件:

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

    这些代码执行后,点击Trigger the handler也提醒消息。

    focus事件不会在Internet Explorer中冒泡。因此,用focus事件委派,跨浏览器无法正常工作。但是,在1.4.2版本,jQuery的解决此限制,将focus模拟为focusin事件,可以使用.live().delegate()的委派方法,解决了跨浏览器的问题.

    Additional Notes(其他注意事项):

    .focus()方法只是作为.on("focus", handler)的一个速记写法,移除该事件可以使用.off("focus")

    例子

    触发 focus 事件。

    <!DOCTYPE html>
    <html>
    <head>
      <style>span {display:none;}</style>
      <script src="https://www.lanmper.cn/static/js/jquery-3.5.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").focus(function () {
      $(this).next("span").css('display','inline').fadeOut(1000);
    });
    </script>
     
    </body>
    </html>
    

    focus fire

    focus fire

    阻止用户在文本框中写任何内容:

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

    在页面显示时,将焦点移到 id 为'login'的 input 元素上:

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

    上篇:blur()

    下篇:change()