2016-09-26 59 views
0

我正在研究一個項目,該項目顯示在文本框內按下的每個鍵的字符代碼。在JavaScript中更改某些鍵的按鍵事件

我的問題是,當某些鍵,即:Shift鍵,退格,空間被壓下去,他們的字符代碼看起來像:16,8,32

我想這些按鍵來保持其正常的行爲按下時。因此,該空格會在文本框中產生空格,而退格將刪除該字符,等等......但其餘的鍵將繼續輸出其字符代碼。

我該如何去做到這一點?

回答

1

您可以檢查鑰匙並相應地進行處理。這裏有一個演示:

document.getElementById("test-textbox").addEventListener("keypress", function(event) { 
 
    var code = event.keyCode || event.which; 
 
    
 
    if(code === 16 || code === 8 || code === 32) //check if space, shift, or backspace 
 
     return; //if yes, allow 
 
    
 
    console.log(code); //if not, log value 
 
    event.preventDefault(); //prevent entry 
 
});
<input type="text" id="test-textbox">

這將允許按住shift,退格鍵和空格鍵,但所有其他人將被記錄。

+0

謝謝。這工作。 – mattHunting10

+0

@ mattHunting10沒問題,樂於幫忙。如果它確實幫助你考慮upvoting,並可能接受:) – Li357

+0

我唯一的其他問題。如何讓SHIFT鍵輸出一個字母的大寫字母?例如,如果有人按「shit + h」輸出73而不是72. – mattHunting10

0

只要你...

  1. 不調用事件對象的preventDefault方法,並
  2. 沒有從事件處理程序

返回false ...你應該精細。

尤其是處理器...

function showCharCode(event) { 
    // NOTE: Don’t call `event.preventDefault()` here. 
    document.querySelector('.char-code').textContent = event.charCode; 
    // NOTE: Don't return false here. 
} 

...仍將傳播事件默認文本框(或輸入,或CONTENTEDITABLE)元素。

+0

但是,如果我不打電話給preventDefault方法。然後我會得到鑰匙的密碼以及與之相關的人物。像65a一樣。而不是65. – mattHunting10

+0

@ mattHunting10因此,您希望字符的鍵碼出現在文本框*中,而不是*實際輸入中,*除空格,退格鍵和換檔鍵外*。 –

+0

是的,謝謝你的迴應。但上面的人已經得到了解決方案。 – mattHunting10

0

我認爲這會對你有用。

var elementID = document.getElementById('elementID'); 

elementID.onkeydown = function(event) { 
    var key = event.keyCode || event.charCode; 

    if(key == 32 || key == 8) 
     event.preventDefault(); 
}; 
+0

我想輸出所有密鑰的字符代碼,除了其中的一些密鑰。所以我必須包含preventDefault()以避免輸出字符Code和字母65a而不是65.所以這就是爲什麼你的例子不起作用。 – mattHunting10