keypress 事件


將事件處理常式繫結至「keypress」事件,或在元素上觸發該事件。

.on( "keyup" [, eventData ], handler )傳回:jQuery

說明:將事件處理常式繫結至「keypress」事件。

此頁面說明 keypress 事件。如需已棄用的 .keypress() 方法,請參閱 .keypress()

注意:由於 keypress 事件未涵蓋在任何官方規格中,因此使用時遇到的實際行為可能因瀏覽器、瀏覽器版本和平台而異。

當瀏覽器註冊鍵盤輸入時,keypress 事件會傳送給元素。這類似於 keydown 事件,但修改鍵和非列印鍵(例如 ShiftEscdelete)會觸發 keydown 事件,但不會觸發 keypress 事件。這兩個事件之間的其他差異可能會因平台和瀏覽器而異。

keypress 事件處理常式可以附加到任何元素,但事件只會傳送給具有焦點的元素。可獲得焦點的元素會因瀏覽器而異,但表單控制項總是能獲得焦點,因此是此事件類型的合理候選對象。

例如,考慮 HTML

1
2
3
4
5
6
7
8
<form>
<fieldset>
<input id="target" type="text" value="Hello there">
</fieldset>
</form>
<div id="other">
Trigger the handler
</div>

事件處理常式可以繫結到輸入欄位

1
2
3
$( "#target" ).on( "keypress", function() {
console.log( "Handler for `keypress` called." );
} );

現在,當插入點在欄位內時,按下鍵會顯示記錄

已呼叫 `keypress` 處理常式。

若要手動觸發事件,請使用 .trigger( "keypress" )

1
2
3
$( "#other" ).on( "click", function() {
$( "#target" ).trigger( "keypress" );
} );

此程式碼執行後,按一下 觸發處理常式 div 也會記錄訊息。

如果需要捕捉任何地方的按鍵(例如,在頁面上實作全域快速鍵),將此行為附加到 document 物件會很有用。由於事件冒泡,除非明確停止,否則所有按鍵都會透過 DOM 傳遞到 document 物件。

若要判斷輸入哪個字元,請檢查傳遞給處理常式函數的 event 物件。雖然瀏覽器使用不同的屬性來儲存此資訊,但 jQuery 會正規化 .which 屬性,因此你可以可靠地使用它來擷取字元代碼。

請注意,keydownkeyup 提供一個表示按下哪個鍵的代碼,而 keypress 則表示輸入哪個字元。例如,小寫「a」會由 keydownkeyup 報告為 65,但由 keypress 報告為 97。大寫「A」由所有事件報告為 65。由於有此區別,在捕捉箭頭鍵等特殊按鍵時,.keydown().keyup() 是更好的選擇。

範例

在輸入中按下按鍵時顯示事件物件。注意:此範例依賴於簡單的 $.print() 外掛程式 (https://jquery-api.dev.org.tw/resources/events.js) 來輸出事件物件。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>on 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-3.7.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="/resources/events.js"></script>
<script>
var xTriggered = 0;
$( "#target" ).on( "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" ).on( "click", function() {
$( "#target" ).trigger( "keypress" );
} );
</script>
</body>
</html>

範例