http://tsuozoe.pixnet.net/blog/post/19733703-vb.net-%E9%8D%B5%E7%9B%A4%E4%BA%8B%E4%BB%B6%E4%BB%8B%E7%B4%B9-%28keypress%E3%80%81keydown-%E5%92%8C-keyup-%E4%BA%8B http://jsbin.com/pexiwolojo/edit?js,console,output http://blog.darkthread.net/post-2011-04-26-keypress-event-under-ime.aspx https://github.com/dodo/jquery-inputevent
當輸入一個字元,下面 4 個事件發生的順序為: KeyDown 事件 > KeyPress 事件 > input > KeyUp 事件
https://developer.mozilla.org/zh-TW/docs/Web/Events/keyDown
keydown、keypress、keyup: 介面:KeyboardEvent (每個 event 相當於一個基於 Event 介面的物件)
input: 介面:Event, InputEvent
keypress 事件:
KeyUp 事件:
KeyDown / KeyUp 事件:
KeyDown / keypress 事件:
https://developer.mozilla.org/en-US/docs/Web/API/KeyboardEvent
KeyboardEvent 物件,描述「使用者與鍵盤的互動」。每個事件描述一個按鍵; 事件類型 (event type:keydown, keypress, 或 keyup ) 識別哪一種動作。
KeyboardEvent.charCode
:
唯讀,返回 "keypress" 事件按下的字符键的字符 Unicode 值。
此屬性僅 keypress 事件使用,按鍵的 char 屬性會包含多個字符,這是屬性中第一個字符的 Unicode 值。
已棄用:請改用 char
KeyboardEvent.keyCode
:
唯讀,代表一個系統和執行相關的數字代碼。
識別 keypress 的鍵的未修改 (被 ctrl
/ shift
改變?) 的值。
這通常是與 Key 對應的十進制 ASCII(RFC 20)或 Windows 1252 代碼。
如果無法識別,則該值為 0。
按鍵事件的值在瀏覽器之間是不同的。
key
KeyboardEvent.which
:
将 keyCode
和 charCode
标准化了。建議用 which
来监视键盘输入。
唯讀,返回按下的鍵的數字鍵碼、或按下的字母(charCode
)。
已棄用:請改用 key
KeyboardEvent.code
:
此屬性表鍵盤上的「實體鍵」。
這個屬性返回的值不會被鍵盤佈局或修飾鍵的狀態所改變。
如果是虛擬鍵盤或輔助功能設備,返回值將由瀏覽器設置為盡可能匹配時體鍵盤所發生的情況。
請注意,要確定哪個「字符與鍵事件對應」,請改用 KeyboardEvent.key
屬性。
KeyboardEvent.key
:
返回用户按下的键盘「實體按键的值」。
这个 API 和 KeyboardEvent.keycode
、KeyboardEvent.which
的区别是:
API 返回的是「键名」,而不是「键值」,如,返回 「Enter」 而不是 「13」。
輸入欄位「啟用中文輸入法」時,將不會觸發 KeyPress 事件, 而 KeyDown 事件中的 KeyCode 則固定傳回 229。
input
事件在输入框「值发生改变时」触发,
比如文本 ("text") 输入框输入或删除文字,
选择 ("select") 输入框值改变等,
"input" 事件不能监听复选框 ("checkbox") 选项变化,
change
能够监听复选框选项变化,亦可监听其他类型输入框输入。
与 "input" 事件不同, "change" 事件「不监听」实时输入 (针对文本输入框) ,
只有在输入框「失去焦点时才触发」,
$("#txtTest").bind("input", function() {
var v = this.value; //可取得目前的文字內容
});
雖然「無法掌握按鍵內容」, 但已可滿足掌握「中文輸入模式」下,每次文字變動的需求。
但連選字時的上下鍵、送字的 Space... 都會包含在內。 http://jsbin.com/bemomep/2/edit?html,js,output
<!DOCTYPE html>
<html>
<head>
<script type='text/javascript'
src='http://ajax.aspnetcdn.com/ajax/jQuery/jquery-1.5.1.js'></script>
<script>
$(function() {
var $log = $("#dvLog");
$("#txtTest").bind("keypress", function (e) {
$log.append("<div>KeyPress: " + e.which + "</div> ");
}).bind("keydown", function (e) {
$log.append("<div>KeyDown: " + e.which + "</div> ");
}).bind("input", function (e) {
$log.append("<div>input</div>");
});
$("#btnClear").click(function() {
$log.empty();
});
$("#txtTest").bind("input", function() {
var v = this.value; // 可取得目前的文字內容
console.log(v)
});
});
</script>
</head>
<body>
<input type="text" id="txtTest" />
<input type="button" id="btnClear" value="clear" />
<div id="dvLog" style="border: 1px solid red; font-size: 9pt;"></div>
</body>
</html>