keypress()

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

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

注意: :由于 keypress 事件没有统一的官方规范说明,所以在不同的浏览器,不同的浏览器版本,和不同的平台实际使用这个事件时可能遇到的问题。

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

当浏览器捕获一个元素上键盘输入时, keypress 就会发送个元素。这是类似 keydown 事件,除了当按键被一直按下(即连续插入字符的场合)时的处理。如果用户按下并按住这个键(不松开释放)的时候, keydown 事件只触发一次,但是 keypress 会在每个字符插入的时候都会触发事件。此外,组合键(如Shift)会触发 keydown 事件,但不会触发 keypress 事件。

keypress 事件处理程序可以附加到任何元素,但该事件只是发送到具有焦点的元素上。不同的浏览器中,可获得焦点的元素略有不同,但是表单元素总是能获取焦点,所以对于此事件类型表单元素是最合适的。

举个例子,看下面的代码

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

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

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

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

Handler for .keypress()called.

如果该键被按下,消息重复。应用不带参数的 .keydown() ,我们可以手动触发这个事件:

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

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

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

要确定哪个键被按下,我们可以检测传递给处理函数的event 对象。而浏览器使用不同的属性来存储这些信息,jQuery的规范了 .which 属性,以便我们能够可靠地使用它来检索关键代码。

值得注意的是 keydown keyup 提供一个代码,表示哪一个键被按下,而 keypress 表示被输入哪个字符。例如,按下了小写的"a",在 keydown keyup 中,对应该键的代码是 65,但是对于 keypress 而言,接收到的代码是 97。如果是大写"A"的话,则所有的相关事件接收到的代码都是 65。由于这个区别,若想捕获敲击了哪个特殊键的话,例如,方向键,使用 .keydown() .keyup() 更好。

Additional Notes(其他注意事项):

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

例子

在文本框中按下某个键时,显示 event 对象。注意:输出 event 对象时,要依赖一个简单的$.print()插件(http://api.jquery.com/scripts/events.js)。

<!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="./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 src="http://api.jquery.com/resources/events.js"></script>
 
<script>
var xTriggered = 0;
$("#target").keypress(function(event) {
  if ( event.which == 13 ) {
     event.preventDefault();
   }
   xTriggered++;
   var msg = "Handler for .keypress() called " + xTriggered + " time(s).";
  $.print( msg, "html" );
  $.print( event );
});
 
$("#other").click(function() {
  $("#target").keypress();
});</script>
 
</body>
</html>

上篇: keyup()