今天去修改一個老系統的時候,解決了一個按鈕觸發在不同瀏覽器上相容的問題。就順手差了一些資料,不要知其然不知其所以然。
先介紹幾個簡單的
KeyDown事件:
當瀏覽器讀到這個語句時,無論按下鍵盤上的哪個鍵,都將呼叫KeyDown()函數
function keyDown(){}document.onkeydown = keyDown;
IE下讀取鍵盤按鍵
keycode = event.keyCode;//String.fromCharCode(event.keyCode)//索引轉換。
FF下讀取鍵盤按鍵
keycode = e.which;String.fromCharCode(e.which);// 索引轉換。
so可以看到不同瀏覽器下對鍵盤按鈕的讀取的方式不同,
ie是enent.keyCode,而FF是event.which.
------------------------------------------------------------------------華麗的分割線------------------------------------------------------------------------------------------------------------------
這裡.我的問題已經解決,判斷一下瀏覽器就再執行不同的方法就可以了。
一般青年解決方案
通過navigator的appName判斷.
function keyUp(e) { if(navigator.appName == "Microsoft Internet Explorer") { var keycode = event.keyCode; var realkey = String.fromCharCode(event.keyCode); }else { var keycode = e.which; var realkey = String.fromCharCode(e.which); } alert("按鍵碼: " + keycode + " 字元: " + realkey); }document.onkeyup = keyUp;
文藝青年解決方案
function keyUp(e) { var currKey = 0, e = e || event; currKey = e.keyCode || e.which || e.charCode; var keyName = String.fromCharCode(currKey); alert("按鍵碼: " + currKey + " 字元: " + keyName); } document.onkeyup= keyUp;
解釋一下
e=e||event
js中這句代碼的意思是,如果在FireFox或Opera中,隱藏的變數e是存在的,那麼e||event返回e,如果在IE中,隱藏變數e是不存在,則返回event。
currKey=e.keyCode||e.which||e.charCode;
這句是為了相容瀏覽器按鍵事件對象的按鍵碼屬性(詳見第三部分), 如IE中,只有keyCode屬性,而FireFox中有which和charCode屬性,Opera中有keyCode和which屬性等。
-----------------------------------------------------------------我又來分割了----------------------------------------------------------------------
問題已經解決,很基礎的問題,我順手用jquery試了一下
網上找了一段代碼是這樣的。
<script language="javascript"> $(function() { $("#input1").keydown(function (event) { $("#div1").html("Key: " + event.keyCode); }); }); </script>
這是ie中的效果