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

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

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

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

    当用户在一个元素上按下键盘上的键的时候,keydown事件就会发送给这个元素。如果按下该键不放(保持按下状态),事件被重复发送到该键,时间间隔取决于操作系统。它可以绑定到任何元素,但该事件只是发送到具有焦点的元素上。不同的浏览器中,可获得焦点的元素略有不同,但是表单元素总是能获取焦点,所以对于此事件类型表单元素是最合适的。

    举个例子,看下面的代码:

    <form>
      <input id="target" type="text" value="Hello there" />
    </form>
    <div id="other">
      Trigger the handler
    </div>
    

    这个事件处理函数可以绑定在输入框上:

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

    现在当光标插入点位于表单域并一个键被按下,警告将被显示:

    Handler for .keydown()called.

    调用不带参数的.keydown(),我们可以手动触发这个事件:

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

    这些代码执行后,点击Trigger the handler同样警报显示。

    如果需要任何按键被捕获(例如,要实现网页全局上的快捷键),那么把这个事件附加到document对象上是非常有用的。所有的按键事件都会沿着各自的 DOM 树冒泡到document对象上,除非明确停止。

    要确定哪个键被按下,我们可以检测传递给处理函数的event 对象。而浏览器使用不同的属性来存储这些信息,jQuery的规范了.which属性,以便我们能够可靠地使用它来检索关键代码。此代码对应一个键盘上的按键,包括像方向键这种特殊键的代码,如果要捕获实际输入文本,.keypress()可能是一个更好的选择。

    Additional Notes(其他注意事项):

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

    例子

    当一个按键在文本框内被按下的时候显示事件对象

    <!DOCTYPE html>
    <html>
    <head>
      <style>
    fieldset { margin-bottom: 1em; }
    input { display: block; margin-bottom: .25em; }
    #print-output {
      width: 100%;
    }
    .print-output-line {
      white-space: pre;
      padding: 5px;
      font-family: monaco, monospace;
      font-size: .7em;
    }
     
    </style>
      <script src="https://www.lanmper.cn/static/js/jquery-3.5.0.js"></script>
    </head>
    <body>
      <form>
      <fieldset>
        <label for="target">Type Something:</label>
        <input id="target" type="text" />
      </fieldset>
    </form>
    <button id="other">
      Trigger the handler
    </button>
    <script type="text/javascript" src="/resources/events.js"></script>
    <script>
    var xTriggered = 0;
    $('#target').keydown(function(event) {
      if (event.which == 13) {
         event.preventDefault();
       }
       xTriggered++;
       var msg = 'Handler for .keydown() called ' + xTriggered + ' time(s).';
      $.print(msg, 'html');
      $.print(event);
    });
     
    $('#other').click(function() {
      $('#target').keydown();
    });</script>
     
    </body>
    </html>
    

    下篇:keyup()