.keypress()
.keypress( handler )
描述:把某个事件处理函数绑定到JavaScript事件“keypress”上,或者在某个元素上触发该事件。
- eventData类型:Anything一个对象,它包含了要传递给事件处理函数的数据。
- handler一个函数,在每次事件被触发时执行它。
该签名不接受任何参数。
注意:因为没有任何官方规范文档包含了对keypress事件的说明,所以在不同的浏览器、不同的浏览器版本、不同的平台上实际使用这个事件时可能遇到问题。
在前两种变体中,该方法是.on( "keypress", handler )的简写,在第三种变体中,它是.trigger( "keypress" )的简写。
当浏览器捕获了一次键盘输入的时候,keypress事件被发送到一个元素上。这近似于keydown事件,除了修饰符和非打印键,比如说Shift、Esc和delete只会触发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() {
console.log( "Handler for .keypress() called." );
});
现在,当插入点在字段内时,按下一个键将显示记录:
Handler for .keypress() called.
要想人为触发该事件,请不带参数地调用.keypress()。
$( "#other" ).click(function() {
$( "#target" ).keypress();
});
在代码执行之后,点击“Trigger the handler”div记录这条消息。
如果需要捕获在任何地方按下的键(比如说,在网页上实现全局的快捷键),可以把这个行为附加到document对象上。因为事件冒泡,任何键按下事件都会沿着各自的DOM树冒泡到document对象上,除非明确地制止它。
要想确定按下了哪个键,请检查传递给处理函数的事件对象。浏览器会用不同的属性来存储这个信息,与此同时jQuery规范化了.which属性,因此你可以可靠地使用它来检索到键代码。
注意,keydown和keyup提供了一个代码,标识哪个键被按下了,与此同时,keypress标识了输入了哪个字符。举个例子,一个小写的“a”会被keydown和keyup报告为65,但是会被keypress报告为97。而一个大写的“A”,会被这三个事件都报告为65。因为这点区别,若要捕获特殊的敲键,比如说捕获箭头键,.keydown()或.keyup()是更好的选择。
其它说明
- 因为
.keypress()方法是.on( "keypress", handler )的简写,所以可以使用.off( "keypress" )来分离。
示例
当事件在输入框中按下键时,显示事件对象。注意:要输出事件对象,演示文档依赖于一个简单的$.print()插件(http://api.jquery.com/sources/events.js)。
<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>keypress demo</title>
<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://code.jquery.com/jquery-1.10.2.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/sources/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>
演示结果