2012-05-15 30 views
5

我寫了一個只允許輸入數字的JS函數。該函數的副本如下:是否在JavaScript中保留了shiftkey

function NumbersOnly(e) { 
    var evt = e || window.event; 
    if (evt) { 
     var keyCode = evt.charCode || evt.keyCode; 
     //Allow tab, backspace and numbers to be pressed, otherwise return false for everything. 
     //(keyCode>=96 && keyCode<=105) are the numpad numbers   
     if ((keyCode >= 48 && keyCode <= 57) || (keyCode >= 96 && keyCode <= 105) || keyCode === 9 || keyCode === 8) { 


     } 
     else { 

      evt.returnValue = false; 
     } 
    } 
} 

此功能正常工作與所有的數字,但在換檔鍵被按下和數字鍵之一被按下發生了我的問題。返回的值是數字上方的字符之一。例如,如果我按住Shift並按下7,'&'被返回,但keyCode仍然是55!我本以爲會有所不同。

所以我的問題是如何檢查shift鍵是否被按下。 我已嘗試以下步驟檢查,但並沒有工作:

if (keyCode === 16) { 
     evt.returnValue = false; 
    } 
    else { 

     if ((keyCode >= 48 && keyCode <= 57) || (keyCode >= 96 && keyCode <= 105) || keyCode === 9 || keyCode === 8) { 


     } 
     else { 

      evt.returnValue = false; 
     } 
    } 

我使用ASP.NET 4.0。

任何幫助將感激地收到。

在此先感謝。

+0

如果你給的console.log的EVT,你會看到Shift鍵,屬性,如果按下Shift鍵,它會成爲真正的 –

回答

12

您可以檢查shift鍵使用按:

if(evt.shiftKey) { 
... //returns true if shift key is pressed 
+0

輝煌。這工作。感謝您的時間 – Sun

+0

對於我'evt.shiftKey'不起作用,將其更改爲'event.shiftKey'。它會工作。 – Shafizadeh

+0

@Sajad,你錯過了這一點。 'evt'只是一個變量,'evt'在上面發佈的問題的上下文中用於我的回答。請參閱問題中的變量'evt',line :: var evt = e || window.event;我希望你現在得到它。 –

0

使用event.key,而不是charCode沒有更多的神奇數字!

function onEvent(event) { 
    const key = event.key; // "a", "1", "Shift", etc. 
    if (isFinite(key)) { // Is number 
     // Do work 
    } 
}; 

Mozilla Docs

Supported Browsers

相關問題