Câu hỏi Làm thế nào để tìm ra phím ký tự nào được nhấn?


Tôi muốn tìm hiểu những gì nhân vật quan trọng được nhấn trong một cách tương thích trình duyệt chéo trong javascript tinh khiết.


76
2017-12-04 12:17


gốc


Không phải tất cả những câu trả lời cho câu hỏi "chìa khóa nào là nhấn "Điều gì xảy ra nếu, khi nó đang thực thi, mã javascript muốn biết liệu một phím trên bàn phím có được giữ lại không? - mwardm
event.key sẽ trực tiếp cung cấp cho bạn - Gibolt


Các câu trả lời:


JavaScript "Xóa":

<script type="text/javascript">
  function myKeyPress(e){
    var keynum;

    if(window.event) { // IE                    
      keynum = e.keyCode;
    } else if(e.which){ // Netscape/Firefox/Opera                   
      keynum = e.which;
    }

    alert(String.fromCharCode(keynum));
  }
</script>

<form>
  <input type="text" onkeypress="return myKeyPress(event)" />
</form>

JQuery:

$(document).keypress(function(event){
  alert(String.fromCharCode(event.which)); 
});

128
2017-12-04 12:36



điều này làm việc ok cho ký tự chữ cái, nhưng những gì về dấu chấm / brakets và các biểu tượng typogtaphic khác? - VoVaVc
@VoVaVc: Nó hoạt động cho những người quá. Điều quan trọng là sử dụng keypress sự kiện, cung cấp cho bạn mã ký tự, thay vì keyup hoặc là keydown cung cấp cho bạn mã khóa. - Tim Down
e.which không được chấp nhận. Sử dụng e.key thay vào đó, như trong if(e.key == 'z') - aljgom
@aljgom, e.key vẫn không có hỗ trợ trình duyệt hoàn chỉnh. - Andy Mercer
Không hoạt động cho các biểu tượng mà bạn phải nhấn phím shift để tạo, giống như! - Curtis


Có một triệu bản sao của câu hỏi này ở đây, nhưng ở đây vẫn một lần nữa:

document.onkeypress = function(evt) {
    evt = evt || window.event;
    var charCode = evt.keyCode || evt.which;
    var charStr = String.fromCharCode(charCode);
    alert(charStr);
};

Tham khảo tốt nhất về các sự kiện chính mà tôi đã xem là http://unixpapa.com/js/key.html.


27
2017-12-04 12:41





Gần đây 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.
});

Nếu bạn muốn đảm bảo chỉ nhập một ký tự, hãy kiểm tra key.length === 1hoặc đó là một trong những nhân vật bạn mong đợi.

Tài liệu Mozilla

Trình duyệt được hỗ trợ


6
2017-09-05 18:03





Hãy xem trang web này để biết sự không nhất quán giữa các trình duyệt http://www.quirksmode.org/js/keys.html


2
2017-12-04 12:26



Chỉ trên sự kiện nhấn phím trong một số trình duyệt (đáng chú ý là không phải Firefox). - Tim Down
@Tim Tốt điểm - thực sự tôi sẽ đưa nó ra. - Matt


Sử dụng cái này:

function onKeyPress(evt){
  evt = (evt) ? evt : (window.event) ? event : null;
  if (evt)
  {
    var charCode = (evt.charCode) ? evt.charCode :((evt.keyCode) ? evt.keyCode :((evt.which) ? evt.which : 0));
    if (charCode == 13) 
        alert('User pressed Enter');
  }
}

1
2017-12-04 12:31





**check this out** 
<!DOCTYPE html>
<html>
<head>
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<script>
$(document).ready(function(){
    $(document).keypress(function(e)
        {

            var keynum;
            if(window.event)
            { // IE                 
                keynum = e.keyCode;
            }
                else if(e.which)
                    { 
                    // Netscape/Firefox/Opera                   
                    keynum = e.which;
                    }
                    alert(String.fromCharCode(keynum));
                    var unicode=e.keyCode? e.keyCode : e.charCode;
                    alert(unicode);
        });
});  

</script>
</head>
<body>

<input type="text"></input>
</body>
</html>

1
2017-12-08 12:31



Đây không phải là bản sao gần giống hệt câu trả lời năm 2009 của @ Coyod chưa? - Chris F Carroll


Một trong những thư viện yêu thích của tôi để làm điều này một cách tinh vi là Bẫy chuột.

Nó có rất nhiều plugin, một trong số đó là record plugin có thể xác định chuỗi các phím được nhấn.

Thí dụ:

<script>
    function recordSequence() {
        Mousetrap.record(function(sequence) {
            // sequence is an array like ['ctrl+k', 'c']
            alert('You pressed: ' + sequence.join(' '));
        });
    }
</script>


<button onclick="recordSequence()">Record</button>

1
2017-11-13 13:47



Đúng là. Sẽ làm. - dipole_moment
@DanLowe Tôi vừa thêm một đoạn trích. - dipole_moment


document.onkeypress = function(event){
    alert(event.key)
}

-2
2018-03-07 19:10