2010-06-26 15 views
6
<html> 
<head> 
<title>Test</title> 

<script type="text/javascript"> 

function showChar(e) { 
    if (e.keyCode != 16) { 
     alert(
      "keyCode: " + e.keyCode + "\n" 
      + "SHIFT key pressed: " + e.shiftKey + "\n" 
     ); 
    } 
} 

</script> 
</head> 

<body onkeydown="showChar(event);"> 
<p>Press any character key, with or without holding down 
the SHIFT key.<br /></p> 
</body> 
</html> 

Làm thế nào tôi có thể phân biệt vốn Một từ chữ thường một trong phương pháp xử lý sự kiện onkeydown? Thuật toán trên kích hoạt cùng một giá trị keyCode. Tôi cần phải phát hiện các chữ cái vốn khi chúng được nhấn trong onkeydown.Làm thế nào để phân biệt chữ in hoa từ những cái thấp hơn trong phương pháp xử lý sự kiện onkeydown

Lưu ý: Mã có chứa ngoại lệ cho khóa SHIFT. Nếu không, nó không cho phép gõ chữ in hoa. BTW, tôi cần sử dụng onkeydown để dùng thử.

Trả lời

6

Dường như với tôi như bạn đã trả lời câu hỏi của riêng bạn. Nếu bạn phát hiện phím SHIFT, bạn có thể dễ dàng phân biệt giữa chữ hoa và chữ thường:

if(e.shiftKey){ 
    alert("You pressed a CAPITAL letter with the code " + e.keyCode); 
}else{ 
    alert("You pressed a LOWERCASE letter with the code " + e.keyCode); 
} 

Hoặc tôi hiểu nhầm câu hỏi của bạn?

Cập nhật: mã trường hợp ASCII Upper có thể dễ dàng được chuyển đổi sang hạ mã trường hợp ASCII bằng cách thêm 32, vì vậy tất cả bạn cần làm là:

<html> 
<head> 
<title>Test</title> 

<script type="text/javascript"> 

function showChar(e){ 
    if(e.keyCode!=16){ // If the pressed key is anything other than SHIFT 
     if(e.keyCode >= 65 && e.keyCode <= 90){ // If the key is a letter 
      if(e.shiftKey){ // If the SHIFT key is down, return the ASCII code for the capital letter 
       alert("ASCII Code: "+e.keyCode); 
      }else{ // If the SHIFT key is not down, convert to the ASCII code for the lowecase letter 
       alert("ASCII Code: "+(e.keyCode+32)); 
      } 
     }else{ 
      alert("ASCII Code (non-letter): "+e.keyCode); 
     } 
    } 
} 

</script> 
</head> 

<body onkeydown="showChar(event);"> 
<p>Press any character key, with or without holding down 
the SHIFT key.<br /></p> 
</body> 
</html> 

Cập nhật 2: Hãy thử điều này:

<html> 
<head> 
<title>Test</title> 

<script type="text/javascript"> 

function showChar(e){ 
    if(e.keyCode!=16){ // If the pressed key is anything other than SHIFT 
     c = String.fromCharCode(e.keyCode); 
     if(e.shiftKey){ // If the SHIFT key is down, return the ASCII code for the capital letter 
      alert("ASCII Code: "+e.keyCode+" Character: "+c); 
     }else{ // If the SHIFT key is not down, convert to the ASCII code for the lowecase letter 
      c = c.toLowerCase(c); 
      alert("ASCII Code: "+c.charCodeAt(0)+" Character: "+c); 
     } 
    } 
} 

</script> 
</head> 

<body onkeydown="showChar(event);"> 
<p>Press any character key, with or without holding down 
the SHIFT key.<br /></p> 
</body> 
</html> 
+0

Nhưng không nên thay đổi keyCode, quá? Tôi cần phải nhận được sự khác biệt từ keyCode hoặc cái gì khác như một giá trị. Trong cả hai ví dụ, mã khóa đều giống nhau. Tôi tìm cách cung cấp một mã phím khác nhau cho chữ A và chữ thường được nhấn. –

+0

Hãy xem bản cập nhật cho câu trả lời của tôi ở trên. Tôi nghĩ đó là những gì bạn đang tìm kiếm. – Computerish

+0

Cảm ơn điều đó khá gần với nhu cầu của tôi. Nhưng làm thế nào tôi có thể thêm hỗ trợ cho UTF-8? Giả sử vốn Ü và chữ hoa nhỏ ü ném thông báo "Mã ASCII (không phải chữ cái)". Có thể phân biệt các latter của Unicode captial từ các chữ cái viết hoa nhỏ trong onkeydown hay không. –

1

Tôi đã tìm kiếm khá nhiều về câu hỏi này, vì tôi đã viết mã để giới hạn yếu tố đầu vào (sử dụng sự kiện keyPress) chỉ cho các ký tự alpha. Tôi đã sử dụng "mã ký tự từ 65 đến 90" và không thể nhập chữ thường trong trường.

Cuối cùng tôi đã phát hiện ra rằng JavaScript đang sử dụng mã ASCII cho điều này, vì vậy tôi vừa thêm "và cũng giữa 97 và 122" và viola! Tôi có thể nhập cả chữ hoa và chữ thường. Để wit:

function alphaOnly(e) { 
    'use strict'; 
    if (!e) { // compensates for IE's key code reporting. 
     e = window.event; 
    } 
    var charCode = (e.which) ? e.which : event.keyCode; 
    if ((charCode >= 65 && charCode <= 90) || (charCode >= 97 && charCode <= 122)) { 
     return true; 
    } else { 
     return false; 
    } 
} 
0

Gần đây hơn và sạch hơn nhiều: sử dụng event.key. Không còn mã số tùy ý!

node.addEventListener('keydown', function(event) { 
    const key = event.key; // "a", "1", "Shift", etc. 
    if (/^[a-z]$/i.test(key)) { // or if (key.length === 1 && /[a-z]/i.test(key)) 
     const isCapital = event.shiftKey; 
    } 
}); 

Mozilla Docs

Supported Browsers

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