2013-06-19 25 views
5

雖然我知道由於e.keyCodee.charCode並不是微不足道的關鍵,但我認爲jQuery幾乎可以規範大部分這些不一致。「#」的一致keyCode

但是,雖然answering this question我發現字符#似乎有非常不一致的keyCodes(當然這對其他幾個代碼也是如此,主要取決於我猜測的瀏覽器和鍵盤佈局)。

Chrome和IE我的電腦上產生了191,火狐163,另一個用戶報告222鉻合金window.event甚至報道U+00BF作爲keyIdentifier - 其中根據Unicode表應該是¿

你知道任何一致的方式來確定這些符號像#不一致鍵碼沒有做一些討厭這樣的:

$('input').keydown(function (e) { 
     if (e.which == 191 || e.which == 163 || e.which == 222){ 
      // hope you got the right key 
      e.preventDefault(); 
     } 
}); 

Fiddle for your pleasure.

+1

嗯...''#是一個關鍵的'3'用'shift'修改。沒有任何按鍵'#' – zerkms

+3

@zerkms我想這取決於你的鍵盤佈局:-p – Christoph

+0

仍然 - 它是**鍵**下來。沒有鑰匙'#' – zerkms

回答

7

這在Chrome和Firefox的作​​品對我來說有美國鍵盤:

$('[id$=txtClient]').keypress(function (e) { 
    if (String.fromCharCode(e.which) == '#') { 
     e.preventDefault(); 
    } 
}); 

keypresskeypress是唯一能讓您可靠的事件有關輸入的字符的信息。

演示:http://jsfiddle.net/elclanrs/ebcet/9/

+0

我讀到關於按鍵不可靠的原因,這就是爲什麼我試圖避免這種情況:'因爲按鍵事件沒有被任何官方規範覆蓋,在瀏覽器,瀏覽器版本和平臺上使用時遇到的實際行爲可能會有所不同。「但它也適用於我。還有'String.fromCharCode'真的很整潔! – Christoph

+1

我不確定jQuery是否會爲'keypress'事件做些神奇的事情,但在IE8 +和所有現代瀏覽器中一直爲我工作。 – elclanrs

+0

我會等待另一個答案,也許可以達到同樣沒有按鍵,否則當然我會接受你的,因爲我很高興fromCharCode;)。 – Christoph

0

您是否嘗試過使用keypress事件?

documentation警告平臺之間的行爲可能存在差異。

在Firefox至少,e.which對應於輸入的字符的ASCII碼改造後:

$('#txtClient').keypress(function (e) { 
    console.log('keypress:', e.which); 
    if (e.which == 35) { 
     return false; 
    } 
}); 

updated fiddle

+0

10分鐘太晚了:-p – Christoph