2010-10-10 46 views
56

我試圖實現按鍵功能,當用戶點擊Esc時,它將刪除一個div。這適用於Firefox的& IE用下面的代碼:jQuery的'按鍵'不適用於Chrome中的某些按鍵。如何解決?

$("body").keypress(function(e) { 
    alert("any key pressed"); 
    if (e.keyCode == 27) { 
     alert("escape pressed"); 
    } 
}); 

如果我按任意鍵,顯示第一alert,如果我打逃生,也顯示第二alert

雖然這不適用於Chrome。第一個alert總是顯示,如果我擊中任何字母鍵,但不是當我點擊Escape,Tab,Space或任何數字時。

這是爲什麼?有什麼方法可以讓Chrome響應這些按鍵?

+0

這是Chrome的[已知錯誤](https://bugs.chromium.org/p/chromium/issues/detail?id=9061)。 2016年5月,一位開發人員表示他們認爲他們的行爲更符合規範,[不會修復](https://bugs.chromium.org/p/chromium/issues/detail?id=9061#c15)。 – Sheepy 2017-02-02 04:50:52

回答

108

嘗試處理​​。

+4

你救了我很多時間..謝謝SLaks – bragboy 2012-02-09 12:15:21

+17

這個答案的訣竅,我認爲非常重要的一點是,「嘗試處理keydown」不是一個通用的解決方案,而是針對「某些鍵」。你仍然需要'keypress'來正確處理ascii字符。所以這真是一個(混亂)的多步驟過程。 – Kato 2012-06-24 18:33:53

+0

很棒的回答。我有這個完全相同的問題,這照顧了它。 – 2015-03-17 20:43:40

16

使用keydown。 keypress在Chrome中無法使用ESC(不確定其他瀏覽器)。

$(newTag).keydown(function(e) { //keypress did not work with ESC; 
    if (event.which == '13') { 
     ProfilePage.saveNewTag(search_id, $(newTag).val()); 
    } 
    else if (window.event.which){ 
     $(newTag).remove(); 
    } 
}); 
+1

感謝您提及Chrome bug。那些想知道爲什麼keypress在其他瀏覽器中爲他們工作的人會很有幫助。 – Gustus 2015-03-19 19:28:24

1

第二警報後也

e.preventDefault(); 

這將增加防止事件被觸發的默認操作。

有關此方法的更多信息here

你的代碼看起來應該像

$("body").keypress(function(e) { 
    alert("any key pressed"); 
    if (e.keyCode == 27) { 
     alert("escape pressed"); 
     e.preventDefault(); 
}}); 
2

對於ESC鍵:

$(document).keydown(function(e) { 
    if(e.keyCode == 27) { /* Run code */ } 
} 

對於字母鍵,如 'L':

$(document).keypress(function(e) { 
    if(e.which == 108) { } 
}); 

工作在兩個Chrome和Firefox

0

使用Jquery.hotkey js文件就可以使Sortcut關鍵

$(document).bind('keydown', 'esc', function(){ }); 
+0

雖然此代碼片段可能會解決問題,但[包括解釋](http://meta.stackexchange.com/questions/114762/explaining-entirely-code-based-answers)確實有助於提高帖子的質量。請記住,您將來會爲讀者回答問題,而這些人可能不知道您的代碼建議的原因。 – DimaSan 2016-12-20 09:36:27

0

按鍵 'ESC'

e.which: 0 
e.keyCode: 27 

KEYUP 'ESC'

e.which: 27 
e.keyCode: 27 

對於非打印字符,最好使用keyup

相關問題