Menangkap peristiwa tekan tombol (atau keydown) pada elemen DIV

146

Bagaimana Anda menjebak penekanan tombol atau acara kunci pada elemen DIV (menggunakan jQuery)?

Apa yang diperlukan untuk memberikan fokus elemen DIV?

Lalchand
sumber
2
Apa artinya "fokus" untuk div?
Jonathon Faust
1
jboyd selain menabraknya ketika memiliki tabindex, Anda dapat menggunakan javascript untuk menemukannya dan memanggil metode fokus di atasnya.
Brendan Enrick
2
@Lalchand ... bisakah kamu menerima jawaban saya kapan saja? :)
helle

Jawaban:

301

(1) Setel tabindexatribut:

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

(2) Mengikat ke keydown:

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

Untuk mengatur fokus pada awal:

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

Untuk menghapus - jika Anda tidak menyukainya - divperbatasan fokus, atur outline: nonedi CSS.

Lihat tabel kode kunci untuk lebih banyak keyCodekemungkinan.

Semua kode dengan asumsi Anda menggunakan jQuery.

#
helle
sumber
43
Tabindex +1 adalah titik kunci di sini untuk membuat div 'dapat dipilih'. JQuery tidak perlu, hal yang sama berfungsi dengan Angular serta (saya kira) dengan peristiwa javascript biasa.
Jukka Dahlbom
4
Apa dukungan browser untuk ini?
knownasilya
27
tabindex adalah bagian kunci, tetapi jangan setel ke nilai apa pun selain "0". Membuatnya apa pun di atas 0 akan mengacaukan pembaca layar untuk pengguna tunanetra (itu akan melewatkan semua yang ada di halaman dan langsung ke tabindex di atas 0). tabindex = "0" menjadikannya "tabbable." Anda dapat memiliki elemen tanpa batas dengan tabindex = "0"
zonabi
2
Bekerja dengan <pre> juga!
dfmiller
2
Luar biasa! Saya kehilangan atribut tabindex, mungkin karena DIV tidak dapat menerima fokus kecuali mereka memiliki tabindex. Terima kasih sobat! Menyelamatkan hidupku! EDIT: bekerja dengan React juga
Vinícius Negrão
6

Di sini contoh di JS polos:

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>

Илья Зеленько
sumber
Bagaimana ini menjawab pertanyaan?
Poul Bak
5

atribut HTML tabindex menunjukkan jika elemennya dapat difokuskan, dan jika / di mana ia berpartisipasi dalam navigasi keyboard berurutan (biasanya dengan Tabtombol). Baca MDN Web Documents untuk referensi lengkap.

Menggunakan Jquery

Menggunakan JavaScript

nkshio
sumber
1
saya benar-benar menemukan ini mencari masalah dengan peristiwa fokus keluar ketika kontrol pada fokus yang hilang mengatakan untuk mengklik pada scroll bar divs, cukup menambahkan tabstop ke div adalah perbaikan, jadi terima kasih banyak
MikeT