返回值:jQuerykeypress(handler(eventObject))
为 JavaScript 的 "keypress" 事件绑定一个处理函数,或者触发元素上的该事件。
-
1.0 新增keypress(handler(eventObject))
handler(eventObject) (Function) 每当事件触发时执行的函数。 -
1.4.3 新增keypress([eventData], handler(eventObject))
eventData (Object) 可选参数,将要传递给事件处理函数的数据映射。handler(eventObject) (Function) 每当事件触发时执行的函数。 -
1.0 新增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
属性,以便我们能可靠地使用它来获取按键代码。
注意,keydown
和 keyup
提供了一个代码代表是哪个键被按下了,对于 keypress
而言,则代表输入了哪个字符。例如,按下了小写的 "a",在 keydown
和 keyup
中,对应该键的代码是 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>