2013-06-19 33 views
5

Mặc dù tôi biết rằng khóa chụp do e.keyCode so với e.charCode không phải là nhỏ, nhưng tôi nghĩ jQuery sẽ có thể bình thường hóa hầu hết những mâu thuẫn đó.Mã khóa phù hợp cho `#`

Tuy nhiên trong khi answering this question Tôi phát hiện ra rằng ký tự # dường như có các mã phím rất không nhất quán (và dĩ nhiên điều này cũng đúng đối với một số mã khác, chủ yếu phụ thuộc vào trình duyệt và keyboardlayout mà tôi đoán).

Chrome và IE mang lại 191, Firefox 163 trên máy tính của tôi, một người dùng khác đã báo cáo 222. Chromes window.event thậm chí được báo cáo U+00BF là keyIdentifier - theo bảng unicode phải là ¿.

Bạn có biết bất kỳ cách nào phù hợp để xác định biểu tượng như như # với mã phím không phù hợp mà không làm một cái gì đó khó chịu như sau:

$('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

Uhm ... '#' là một chìa khóa '3' với 'shift' bổ nghĩa. Không có khóa '#' ở tất cả – zerkms

+3

@zerkms Tôi đoán điều đó phụ thuộc vào bố cục bàn phím của bạn :-p – Christoph

+0

vẫn còn - đó là ** phím **. Không có phím '#' – zerkms

Trả lời

7

này làm việc cho tôi trong Chrome và Firefox với một Bàn phím Hoa Kỳ:

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

keypress là sự kiện duy nhất sẽ cung cấp cho bạn đáng tin cậy thông tin về ký tự đã được nhập.

Demo:http://jsfiddle.net/elclanrs/ebcet/9/

+0

Tôi đọc về nhấn phím không đáng tin cậy, đó là lý do tại sao tôi cố gắng tránh điều này: hành vi thực tế gặp phải khi sử dụng nó có thể khác nhau giữa các trình duyệt, các phiên bản trình duyệt và nền tảng.' Nhưng nó cũng hoạt động đối với tôi. Ngoài ra, 'String.fromCharCode' thực sự gọn gàng! – Christoph

+1

Tôi không chắc liệu jQuery có thực hiện một số phép thuật cho sự kiện 'nhấn phím 'hay không nhưng luôn làm việc cho tôi trong IE8 + và tất cả các trình duyệt hiện đại. – elclanrs

+0

Tôi sẽ đợi một câu trả lời khác mà có lẽ có thể đạt được như vậy mà không cần nhấn phím, nếu không tất nhiên tôi sẽ chấp nhận của bạn như tôi rất vui mừng bởi fromCharCode;). – Christoph

0

Bạn đã cố gắng sử dụng các sự kiện keypress?

documentation cảnh báo về những khác biệt có thể có về hành vi giữa các nền tảng.

Trong Firefox ít nhất, e.which tương ứng với mã ascii của ký tự gõ sau khi chuyển đổi:

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

updated fiddle

+0

10 phút quá muộn dude :-p – Christoph

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