2011-10-14 38 views
5

Cách sạch nhất cách nào trong JavaScript hoặc jQuery để lọc ra các phím điều khiển . Bằng các phím điều khiển , ý tôi là bất kỳ phím nào KHÔNG phải là A-Z, 0-9 hoặc các ký tự đặc biệt (ví dụ: @, @, #, v.v.). Tôi chỉ muốn lọc ra các phím như 'Shift', 'Alt', F1- F9, Caps Lock, v.v.jQuery/Javascript - Từ chối các phím "điều khiển" trên sự kiện chínhĐọc

Tôi chắc chắn rằng tôi có thể kiểm tra từng mã ASCII riêng lẻ từ đối số sự kiện ... nhưng tôi 'm tự hỏi nếu có một "sạch" giải pháp.

Lưu ý: Tôi đang phát triển một ứng dụng đặc biệt dành cho IE 8

Trả lời

5

tôi đã đi với một cái gì đó như thế này:

function (e, inputElement) { 
    // If the user gives the textbox any keyboard input, mark the input box as "dirty" 
    var scope = this; 
    var k = e.which; 

    // Verify that the key entered is not a special key 
    if (k == 20 /* Caps lock */ 
    || k == 16 /* Shift */ 
    || k == 9 /* Tab */ 
    || k == 27 /* Escape Key */ 
    || k == 17 /* Control Key */ 
    || k == 91 /* Windows Command Key */ 
    || k == 19 /* Pause Break */ 
    || k == 18 /* Alt Key */ 
    || k == 93 /* Right Click Point Key */ 
    || (k >= 35 && k <= 40) /* Home, End, Arrow Keys */ 
    || k == 45 /* Insert Key */ 
    || (k >= 33 && k <= 34) /*Page Down, Page Up */ 
    || (k >= 112 && k <= 123) /* F1 - F12 */ 
    || (k >= 144 && k <= 145)) { /* Num Lock, Scroll Lock */ 
     return false; 
    } 
    else { 
     scope.setPointValueDirtyStatus(inputElement, true); 
    } 
} 
+0

Có. Lực lượng vũ phu có vẻ là cần thiết: ( – Zeek

+0

BTW "Phím bấm chuột phải" là gì? – Zeek

3

Sử dụng event.which - Mỗi phím có mã riêng của mình. Phím điều khiển là 17, phím shift là 16 và @ là hai phím khác nhau, 16 tiếp theo là 50. Sử dụng bản trình diễn trên trang đó để tìm ra giá trị nào được trả lại cho mỗi khóa bạn muốn chấp nhận hoặc bỏ qua.

1

Điều này sẽ chỉ cho phép a-z (mã 65 - 90), 0-9 (48 - 57). Lưu ý rằng phải cho phép shift vì cần phải chuyển văn bản thành chữ hoa.

$("...").keydown(function(ev){ 
    var k = ev.which; 
    if(!(k >= 65 && k <= 90) /* a-z */ 
    || !(k >= 48 && k <= 57) /* numbers */ 
    || !(k >= 96 && k <= 111) /* numeric keyboard*/ 
    || k != 59 || k != 61 || k != 188 || k != 190 || k != 191 || k != 191 
    || k != 192 || !(k >= 219 && k <= 222) || k != 32 /* Comma's, etc. */ 
    || ev.ctrlKey || ev.altKey/* || ev.shiftKey*/){ 
     //Filter 
    } 
}) 
+0

Làm thế nào để thỏa thuận này với các ký tự unicode như umlats Đức? Thủ đô? – Zeek

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