JavaScript Event學(xué)習(xí)第十一章 按鍵的檢測(cè)
正如我們了解到的,瀏覽器在最開(kāi)始設(shè)計(jì)的時(shí)候并沒(méi)有一個(gè)標(biāo)準(zhǔn),大家都像做實(shí)驗(yàn)似的,最后的成品雖然是有用的,但是肯定造成了兼容性的問(wèn)題。按鍵問(wèn)題也不例外:這里有兩個(gè)屬性能檢測(cè)到用戶按下了什么鍵,雖然有足夠的理由為什么需要兩個(gè)屬性,但是依然并不是所有的瀏覽器都支持。
另外,在keypress與keydown和keyup之間還有一些很重要的區(qū)別。
最后就是windows和mac的區(qū)別了,在mac上要檢測(cè)用戶按下了什么鍵簡(jiǎn)直比在windows下難了N倍。
keyCode和charCode
能檢測(cè)到用戶按下了什么鍵的兩個(gè)屬性就是keyCode和charCode了。簡(jiǎn)單說(shuō)來(lái):keyCode是用來(lái)檢測(cè)用戶真正按下了鍵盤上那個(gè)鍵的,而charCode則是給出鍵入字符的ASCII碼。有一些小問(wèn)題需要注意:大寫的A和小寫的a的keyCode是一樣的,因?yàn)樗麄冊(cè)阪I盤上就是一個(gè)鍵;但是charCode不一樣,因?yàn)樗麄z是兩個(gè)不同的字符。
IE和Opera不支持charCode。然而他們會(huì)在keyCode里面保存字符信息,但是只是在onkeypress的情況下,在onkeydown/up情況下包含的是鍵的信息。
字符和數(shù)字鍵
讓我們以一個(gè)簡(jiǎn)單的例子開(kāi)始。小寫a的ASCII碼是97,大寫的是65。那么在兩種情況下,當(dāng)用戶在鍵盤上敲下相同的鍵的時(shí)候,什么時(shí)候的鍵值是65呢(相當(dāng)于大寫的A)
keyCode
charCode
因此,在onkeydown/up的情況下,你能夠從keyCode里面得到鍵值。在onkeypress情況下,想要得到字符值就要使用:evt.charCode || evt.keyCode.
標(biāo)點(diǎn)符號(hào)
我還是決定不對(duì)標(biāo)點(diǎn)符號(hào)鍵做測(cè)試了。我懷疑這不僅跟瀏覽器和操作系統(tǒng)有關(guān),還可能跟鍵盤設(shè)置和默認(rèn)語(yǔ)言有關(guān)。我一般用的是荷蘭語(yǔ)版的windows,如果跟美國(guó)版的101鍵的鍵盤相比有很大出入,我一點(diǎn)都不會(huì)覺(jué)得意外。
比如說(shuō)shift+,鍵出來(lái)的應(yīng)該是<,但是我測(cè)試的ASCII碼的結(jié)果卻是'?'的。當(dāng)我發(fā)現(xiàn)了這個(gè)問(wèn)題,我決定還是不在標(biāo)點(diǎn)符號(hào)鍵的問(wèn)題上浪費(fèi)時(shí)間了.
特別鍵
功能鍵就是只那些不能打印出來(lái)的但是卻具有一定功能的鍵。比如shift、ESC、enter等等都是功能鍵。
一些說(shuō)明:
1、一般,mac的可靠性比windows要差,有些鍵可能檢測(cè)不到
2、IE不會(huì)觸發(fā)下面這鍵的keypress事件:delete, end, enter, escape, 功能鍵, home, insert, pageUp/Down 和 tab。
3、在onkeypress事件下,Safari會(huì)給下面這些鍵給出很奇怪的keyCode值:delete, end, 功能鍵, home 和 pageUp.Down。但是在onkeydown/up下面就很正常。
4、Alt,Cmd,Ctrl和shfit鍵在mac上無(wú)法探測(cè),不過(guò)Opera下面例外。然而你卻可以使用altKey,ctrlKey,shfitKey這些屬性。
如果你需要探測(cè)這些鍵,你就探測(cè)一下載onkeydown/up下面的keyCode就行了,算是給自己幫忙了,onkeypress和charCode就忘掉吧。
原文后面有個(gè)大的鍵值的列表,還有一個(gè)測(cè)試框,有興趣的童鞋可以移步。
翻譯地址:http://www.quirksmode.org/js/keys.html
轉(zhuǎn)載請(qǐng)保留以下信息
作者:北玉(tw:@rehawk)
相關(guān)文章
11個(gè)ES13中令人驚嘆的JavaScript新特性總結(jié)
與許多其他編程語(yǔ)言一樣,JavaScript?也在不斷發(fā)展,小編今天就為大家介紹ES13中添加的最新功能,并查看其用法示例以更好地理解它們,有需要的小伙伴可以了解下2023-09-09uniapp調(diào)用百度語(yǔ)音實(shí)現(xiàn)錄音轉(zhuǎn)文字功能
這篇文章主要介紹了uniapp通過(guò)調(diào)用百度語(yǔ)音,實(shí)現(xiàn)錄音轉(zhuǎn)文字的功能。文中的示例代碼對(duì)我們學(xué)習(xí)或工作有一定的幫助,感興趣的小伙伴可以跟隨小編學(xué)習(xí)一下2021-12-12vue渲染大量數(shù)據(jù)時(shí)卡頓卡死解決方法
這篇文章主要介紹了vue渲染大量數(shù)據(jù)時(shí)發(fā)生卡頓卡死問(wèn)題時(shí)的解決方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2022-08-08javascript 實(shí)現(xiàn)文本使用省略號(hào)替代(超出固定高度的情況)
這篇文章主要介紹了javascript 實(shí)現(xiàn)文本使用省略號(hào)替代(超出固定高度的情況)的相關(guān)資料,需要的朋友可以參考下2017-02-02js定時(shí)調(diào)用方法成功后并停止調(diào)用示例
這篇文章主要介紹了js定時(shí)調(diào)用方法成功后并停止調(diào)用的實(shí)現(xiàn),需要的朋友可以參考下2014-04-04JavaScript中l(wèi)ayim之整合右鍵菜單的示例代碼
這篇文章主要介紹了JavaScript中l(wèi)ayim之整合右鍵菜單的示例代碼,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-02-02原生javascript實(shí)現(xiàn)無(wú)間縫滾動(dòng)示例
原生javascript無(wú)間縫滾動(dòng)目前支持的是豎向與橫向滾動(dòng),下面有個(gè)不錯(cuò)的示例,大家可以參考下2014-01-01微信小程序?qū)崿F(xiàn)定位及到指定位置導(dǎo)航的示例代碼
這篇文章主要介紹了微信小程序?qū)崿F(xiàn)定位及到指定位置導(dǎo)航的示例代碼,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-08-08layui+ssm實(shí)現(xiàn)數(shù)據(jù)表格雙擊編輯更新數(shù)據(jù)功能
在使用layui加載后端數(shù)據(jù)請(qǐng)求時(shí),對(duì)數(shù)據(jù)選項(xiàng)框進(jìn)行雙擊即可實(shí)現(xiàn)數(shù)據(jù)的輸入編輯更改,本文結(jié)合示例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友參考下吧2023-12-12