2009-11-17 43 views
10

我在與一些JavaScript,我已經寫了麻煩,但只與Internet Explorer 8我對Internet Explorer 7中執行這個沒有問題或更早的版本,或使用Mozilla Firefox 3.5或更早版本。它還正確執行,當我使用兼容模式在Internet Explorer 8JavaScript的邀請碼值是「未定義」在Internet Explorer 8

我在做什麼是壓倒當用戶輸入一個值轉換爲文本框輸入按鍵。所以,我的元素我有這樣的:

<asp:TextBox ID="ddPassword" runat="server" TextMode="Password" onkeypress="doSubmit(event)" Width="325"></asp:TextBox> 

然後,我有以下的JavaScript方法:

function doSubmit(e) 
{ 
    var keyCode = (window.Event) ? e.which : e.keyCode; 
    if (keyCode == 13) 
     document.getElementById("ctl00_ContentPlaceHolder1_Login").click(); 
} 

同樣,這一切工作正常,幾乎所有其他瀏覽器。 Internet Explorer 8只是讓我很難。

任何幫助你可能有非常感謝。謝謝!

更新:謝謝大家對你的快速反饋。 Chris Pebble和Bryan Kyle都爲此解決方案提供了幫助。我已經授予布賴恩「答案」以幫助他的聲譽。感謝大家!

回答

24

它看起來像IE8下的window.EventkeyCode屬性爲undefinedwindow.event相同的屬性(注意是小寫Ë)具有價值。您可以嘗試使用window.event

function doSubmit(e) 
{ 
    var keyCode = (window.event) ? e.which : e.keyCode; 
    if (keyCode == 13) 
     document.getElementById("ctl00_ContentPlaceHolder1_Login").click(); 
} 
0

嘗試添加onkeyup事件,並調用相同的函數。

提示: 您可以在doSubmit開始處添加debugger;來設置中斷,然後您可以檢查keyCode。

+0

有意思, 「的onkeyup」 事件甚至不執行在這種情況下在Internet Explorer 8 –

0

我覺得window.Event.keyCode作品在IE8(我現在不能,雖然測試是)

7

只是一種預感,試試這個:

var keyCode = e.keyCode ? e.keyCode : e.which; 
+0

這適用於Internet Explorer 8,但不適用於此代碼用於處理的其他任何瀏覽器。 –

+0

Chris,請參閱下面的評論。你和布賴恩一起幫助解決這個問題!再次感謝! –

0

或類似的東西。 var keyCode = e.which || e.keyCode;

1

我個人比較喜歡多鍵方法。這樣就可以檢測到多個按鍵,但同一個按鍵也是一樣的,它適用於我測試過的每個瀏覽器。

map={}//declare object to hold data 
onkeydown=onkeyup=function(e){ 
    e=e||event//if e doesn't exist (like in IE), replace it with window.event 
    map[e.keyCode]=e.type=='keydown'?true:false 
    //Check for keycodes 
} 

的另一種方法是在每個事件分開onkeydownonkeyup事件,並明確定義地圖子項:

map={} 
onkeydown=function(e){ 
    e=e||event 
    map[e.keyCode]=true 
} 
onkeyup=function(e){ 
    e=e||event 
    map[e.keyCode]=false 
} 

無論哪種方式工作得很好。現在,實際檢測的鍵擊,該方法,包括錯誤修正,方法是:

//[in onkeydown or onkeyup function, after map[e.keyCode] has been decided...] 
if(map[keycode]){ 
    //do something 
    map={} 
    return false 
} 

map[keycode]構成特定鍵碼,如用於13Enter,或者17CTRL

map={}線從unfocusing的情況下,「持有」上鍵,而return false預防,例如,從彈出的書籤對話框時您檢查CTRL+D清除地圖對象保留它。在某些情況下,您可能想用e.preventDefault()替換它,但在大多數情況下我發現return false更有效。爲了獲得清晰的視角,請使用CTRL+D來嘗試。 Ctrl17,並且D68。請注意,如果沒有return false行,將會彈出「書籤」對話框。

以下是一些例子:

if(map[17]&&map[13]){//CTRL+ENTER 
    alert('CTRL+ENTER was pressed') 
    map={} 
    return false 
}else if(map[13]){//ENTER 
    alert('Enter was pressed') 
    map={} 
    return false 
} 

有一點要記住的是,較小的組合應該最後來了。首先在if..else鏈中首先放置較大的組合,因此您同時不會收到EnterCTRL+ENTER的提醒。

現在,一個完整的例子「把它放在一起」。假設您想提醒一條消息,其中包含用戶按SHIFT+?時登錄的說明,並在用戶按ENTER時登錄。這個例子也是跨瀏覽器兼容,這意味着它在IE,太:

map={} 
keydown=function(e){ 
    e=e||event 
    map[e.keyCode]=true 
    if(map[16]&&map[191]){//SHIFT+? 
     alert('1) Type your username and password\n\n2) Hit Enter to log in') 
     map={} 
     return false 
    }else if(map[13]){//Enter 
     alert('Logging in...') 
     map={} 
     return false 
    } 
} 
keyup=function(e){ 
    e=e||event 
    map[e.keyCode]=false 
} 
onkeydown=keydown 
onkeyup=keyup//For Regular browsers 
try{//for IE 
    document.attachEvent('onkeydown',keydown) 
    document.attachEvent('onkeyup',keyup) 
}catch(e){ 
    //do nothing 
} 

注意一些特殊的按鍵有不同的引擎不同的代碼。但正如我測試過的,這適用於我目前在我的電腦上使用的所有瀏覽器,包括Maxthon 3,Google Chrome,Internet Explorer(9和8)和Firefox。

我希望這是有幫助的。

3

它是在這樣的工作對我的代碼:

var kcode = (window.event) ? event.keyCode : event.which; 
1

試試這個:

function checkKeyCode(e){ 
    if (!e) e = window.event; var kCd = e.which || e.keyCode; 
    return kCd; 
} 
相關問題