返回值:jQuerykeypress(handler(eventObject))

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

注意: 由于 keypress 事件没有统一的官方规范说明,所以在不同的浏览器,相同浏览器的不同版本及不同的平台上使用该事件时,其实际发生的行为可能会不一致。

带有参数的该方法是 .bind("keypress", handler) 的快捷方式,不带参数的该方法是 .trigger("keypress") 的快捷方式。

当在元素上有键盘输入的时候,就会触发 keypress 事件。该事件和 keydown 事件类似,不同之处在于,当按键被一直按下(即连续插入字符的场合)时的处理。如果用户按下了某键但是没有松开时,keydown 事件只被触发一次,但是 keypress 事件会在每插入一个字符时,被触发一次。此外,修饰键(例如 Shift 键) 会触发 keydown 事件,但是不会触发 keypress 事件。

keypress 事件可以添加到任何元素,但是只有可以获得焦点的元素才能触发这个事件。不同的浏览器中,可获得焦点的元素略有不同,但是表单元素总是可以获得焦点的,所以这个事件可以放心的用在这些元素上。

举例来说,请看下面的HTML:

<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.

如果按键一直被按下,就会重复显示上述信息。我们可以调用不带参数的 .keypress() 方法,手动触发这个事件:

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

在代码执行后,如果你点击 Trigger the handler 将同样会弹出上面的消息。

如果需要捕获在任意位置的按键事件(例如要在页面上实现全局的快捷键),那么可以把这个事件添加到 document 对象上去。由于事件冒泡,所有的按键事件都会沿着各自的 DOM 树冒泡到 document 对象上,除非明确禁止事件冒泡。

要确定哪个按键被按下了,我们可以检测传递给事件处理函数的 event 对象。由于不同的浏览器使用不同的属性来存储这个信息,所以 jQuery 将它们标准化成 .which 属性,以便我们能可靠地使用它来获取按键代码。

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

示例:

在文本框中按下某个键时,显示 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="jquery.min.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="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>

演示: