Chụp sự kiện nhấn phím (hoặc nhấn phím) trên phần tử DIV


146

Làm thế nào để bạn bẫy sự kiện nhấn phím hoặc khóa xuống trên một phần tử DIV (sử dụng jQuery)?

Những gì được yêu cầu để tập trung vào yếu tố DIV?


2
"Tập trung" có nghĩa là gì đối với một div?
Jonathon Faust

1
jboyd ngoài việc lập bảng cho nó khi nó có tabindex, bạn có thể sử dụng javascript để tìm nó và gọi phương thức lấy nét trên nó.
Brendan Enrick

2
@Lalowder ... bạn có thể chấp nhận câu trả lời của tôi không? :)
helle

Câu trả lời:


301

(1) Đặt tabindexthuộc tính:

<div id="mydiv" tabindex="0" />

(2) Ràng buộc với phím tắt:

 $('#mydiv').on('keydown', function(event) {
    //console.log(event.keyCode);
    switch(event.keyCode){
       //....your actions for the keys .....
    }
 });

Để đặt trọng tâm khi bắt đầu:

$(function() {
   $('#mydiv').focus();
});

Để xóa - nếu bạn không thích nó - divđường viền tiêu điểm, hãy đặt outline: nonetrong CSS.

Xem bảng mã khóa để biết thêm keyCodekhả năng.

Tất cả các mã giả sử bạn sử dụng jQuery.

#

43
Tabindex +1 là điểm chính ở đây để làm cho div 'có thể lựa chọn'. JQuery không cần thiết, điều tương tự cũng hoạt động với Angular cũng như (tôi cho là) ​​với các sự kiện javascript đơn giản.
Jukka Dahlbom

4
Trình duyệt hỗ trợ gì cho việc này?
biết đến

27
tabindex là một phần quan trọng, nhưng không đặt nó thành bất kỳ giá trị nào ngoài "0". Làm cho nó bất cứ điều gì trên 0 sẽ gây rối cho trình đọc màn hình cho người dùng khiếm thị (nó sẽ bỏ qua mọi thứ trên trang và đi thẳng đến bất kỳ tabindex nào trên 0). tabindex = "0" làm cho nó "tabbable." bạn có thể có các phần tử vô hạn với tabindex = "0"
zonabi

2
Hoạt động với <pre> là tốt!
dfmiller 15/03/2016

2
Thông minh! Tôi đã thiếu thuộc tính tabindex, có lẽ vì DIV không thể nhận được tiêu điểm trừ khi họ có tabindex. Cảm ơn người đàn ông! Cứu cuộc đời tôi! EDIT: cũng hoạt động với React
Vinícius Negrão

6

Dưới đây là ví dụ về JS đơn giản:

document.querySelector('#myDiv').addEventListener('keyup', function (e) {
  console.log(e.key)
})
#myDiv {
  outline: none;
}
<div 
  id="myDiv"
  tabindex="0"
>
  Press me and start typing
</div>


Làm thế nào điều này trả lời q đốt?
Poul Bak

5

thuộc tính HTML tabindex cho biết liệu phần tử của nó có thể được tập trung hay không và nếu / nơi nó tham gia vào điều hướng bàn phím tuần tự (thường là với Tabphím). Đọc Tài liệu Web MDN để tham khảo đầy đủ.

Sử dụng Jquery

Sử dụng JavaScript


1
Tôi thực sự thấy điều này đang tìm kiếm một vấn đề với sự kiện tập trung kích hoạt khi các điều khiển trên div bị mất tiêu điểm nói rằng nhấp vào thanh cuộn div, chỉ cần thêm tabstop vào div là cách khắc phục, vì vậy xin cảm ơn rất nhiều
MikeT
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.