13.4 事件類型 383
14
2
3
17
18
13
19
7
8
9
10
11
12
var textbox = document.getElementById(\"myText\");
EventUtil.addHandler(textbox, \"keypress\", function(event){
event = EventUtil.getEvent(event);
if (event.getModifierState){
alert(event.getModifierState(\"Shift\"));
}
});
DOMLevel3LocationGetModifierStateExample01.htm
實(shí)際上,通過 event 對象的 shiftKey、altKey、ctrlKey 和 metaKey 屬性已經(jīng)可以取得類似
的屬性了。IE9 是唯一支持 getModifierState()方法的瀏覽器。
4. textInput 事件
“DOM3 級(jí)事件”規(guī)范中引入了一個(gè)新事件,名叫 textInput。根據(jù)規(guī)范,當(dāng)用戶在可編輯區(qū)域中
輸入字符時(shí),就會(huì)觸發(fā)這個(gè)事件。這個(gè)用于替代 keypress 的 textInput 事件的行為稍有不同。區(qū)別
之一就是任何可以獲得焦點(diǎn)的元素都可以觸發(fā) keypress 事件,但只有可編輯區(qū)域才能觸發(fā) textInput
事件。區(qū)別之二是 textInput 事件只會(huì)在用戶按下能夠輸入實(shí)際字符的鍵時(shí)才會(huì)被觸發(fā),而 keypress
事件則在按下那些能夠影響文本顯示的鍵時(shí)也會(huì)觸發(fā)(例如退格鍵)。
由于 textInput 事件主要考慮的是字符,因此它的 event 對象中還包含一個(gè) data 屬性,這個(gè)屬
性的值就是用戶輸入的字符(而非字符編碼)。換句話說,用戶在沒有按上檔鍵的情況下按下了 S 鍵,
data 的值就是\"s\",而如果在按住上檔鍵時(shí)按下該鍵,data 的值就是\"S\"。
以下是一個(gè)使用 textInput 事件的例子:
var textbox = document.getElementById(\"myText\");
EventUtil.addHandler(textbox, \"textInput\", function(event){
event = EventUtil.getEvent(event);
alert(event.data);
});
TextInputEventExample01.htm
在這個(gè)例子中,插入到文本框中的字符會(huì)通過一個(gè)警告框顯示出來。
另外,event 對象上還有一個(gè)屬性,叫 inputMethod,表示把文本輸入到文本框中的方式。
? 0,表示瀏覽器不確定是怎么輸入的。
? 1,表示是使用鍵盤輸入的。
? 2,表示文本是粘貼進(jìn)來的。
? 3,表示文本是拖放進(jìn)來的。
? 4,表示文本是使用 IME 輸入的。
? 5,表示文本是通過在表單中選擇某一項(xiàng)輸入的。
? 6,表示文本是通過手寫輸入的(比如使用手寫筆)。
? 7,表示文本是通過語音輸入的。
? 8,表示文本是通過幾種方法組合輸入的。
? 9,表示文本是通過腳本輸入的。
使用這個(gè)屬性可以確定文本是如何輸入到控件中的,從而可以驗(yàn)證其有效性。支持 textInput 屬
性的瀏覽器有 IE9+、Safari 和 Chrome。只有 IE 支持 inputMethod 屬性。
圖靈社區(qū)會(huì)員 StinkBC(StinkBC@gmail.com) 專享 尊重版權(quán)