.keypress()

.keypress( handler(eventObject) ) 官网原E文:jQuery

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

  • version added: 1.0.keypress( handler(eventObject) )

    handler(eventObject)每次事件触发时会执行的函数。

  • version added: 1.4.3.keypress( [ eventData ], handler(eventObject) )

    eventData将要传递给事件处理函数的数据映射。

    handler(eventObject)每次事件触发时会执行的函数。

  • version added: 1.0.keypress()

这个函数的第一种用法是 .bind('keypress', handler) 的快捷方式,第二种用法是 .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>

这个事件处理程序可以绑定到input field:

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

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

Handler for .keypress() called.

当不同的元素被点击时我们也可以触发这个事件:

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

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

如果需要任何按键被捕获(例如,要实现网页全局上的快捷键),附加此事件到document对象是非常有用的。由于事件冒泡,所有的按键将使他们DOM方式注册到document对象上,除非明确停止。

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

值得注意的是keydownkeyup提供一个代码,显示哪一个键被按下,而keypress显示的哪个字符被输入。例如,一个小写的“a”将被报告为65 keydownkeyup ,但通过 keypress 显示的是97。一个大写字母“A”的报告为65岁的所有事件。由于这种区别,当捕捉特殊按键,如箭头,.keydown().keyup()是较好的选择。

Example:

Show the event object for the keypress handler when a key is pressed in the input.

<!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="http://code.jquery.com/jquery-latest.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 type="text/javascript" src="/scripts/events.js"></script>
<script>
var xTriggered = 0;
$('#target').keypress(function(event) {
  if (event.keyCode == '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>

Demo:

jQuery 1.6 API 中文版Clove整理、修订