2012-05-15 57 views
5

Tôi đã viết một hàm JS chỉ cho phép nhập số. Một bản sao của chức năng đó là dưới đây:Phím shift được giữ trong JavaScript

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; 
     } 
    } 
} 

Chức năng này hoạt động tốt với tất cả các số nhưng vấn đề của tôi xảy ra khi phím shift được ấn và một trong các phím số được nhấn. Giá trị trả lại là một trong các ký tự phía trên các số. Vì vậy, ví dụ nếu tôi giữ phím shift và bấm phím 7, '&' được trả về nhưng mã khóa vẫn là 55 !! Tôi đã mong đợi điều đó sẽ khác.

Vì vậy, câu hỏi của tôi là làm cách nào để kiểm tra xem phím shift có được giữ hay không. Tôi đã thử kiểm tra sau nhưng điều này không hoạt động:

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

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


     } 
     else { 

      evt.returnValue = false; 
     } 
    } 

Tôi đang sử dụng ASP.NET 4.0.

Mọi trợ giúp sẽ được nhận biết ơn.

Xin cảm ơn trước.

+0

Nếu bạn cung cấp cho evt trong console.log, bạn sẽ thấy thuộc tính shiftKey, nếu phím shift được nhấn, nó sẽ trở thành hiện thực –

Trả lời

12

Bạn có thể kiểm tra xem phím shift được nhấn bằng:

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

Brilliant. Những công việc này. Cảm ơn thời gian của bạn – Sun

+0

Đối với tôi 'evt.shiftKey' không hoạt động, thay đổi nó thành' event.shiftKey'. Nó sẽ hoạt động. – Shafizadeh

+0

@Sajad, bạn đang thiếu điểm. 'evt' chỉ là một biến, 'evt' được sử dụng trong câu trả lời của tôi trong ngữ cảnh của câu hỏi được đăng ở trên .. xem biến 'evt' trong câu hỏi, dòng :: var evt = e || window.event; Tôi hy vọng bạn nhận được nó ngay bây giờ. –

0

Sử dụng event.key thay vì charCode. Không còn số ma thuật nào nữa!

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

Mozilla Docs

Supported Browsers

Các vấn đề liên quan