Saya pikir ini akan dijawab di suatu tempat di Stack Overflow, tetapi saya tidak dapat menemukannya.
Jika saya mendengarkan acara penekanan tombol, haruskah saya menggunakan .keyCode
atau .which
untuk menentukan apakah tombol Enter ditekan?
Saya selalu melakukan sesuatu seperti berikut:
$("#someid").keypress(function(e) {
if (e.keyCode === 13) {
e.preventDefault();
// do something
}
});
Tapi saya melihat contoh yang menggunakan .which
bukan .keyCode
. Apa bedanya? Apakah satu browser lebih ramah silang dari yang lain?
javascript
jquery
ScottE
sumber
sumber
Jawaban:
Catatan: Jawaban di bawah ini ditulis pada tahun 2010. Di sini bertahun-tahun kemudian, keduanya
keyCode
danwhich
sudah usang dalam mendukungkey
(untuk kunci logis) dancode
(untuk penempatan fisik kunci). Tetapi perhatikan bahwa IE tidak mendukungcode
, dan dukungannyakey
didasarkan pada versi spesifikasi yang lebih lama sehingga tidak cukup benar. Saat saya menulis ini, Edge saat ini berdasarkan pada EdgeHTML dan Chakra tidak mendukungcode
baik, tetapi Microsoft meluncurkan pengganti untuk Blink - dan V8 berbasis untuk Edge, yang mungkin melakukan / akan.Beberapa browser digunakan
keyCode
, yang lain digunakanwhich
.Jika Anda menggunakan jQuery, Anda dapat menggunakan
which
jQuery sebagai standar ; Lebih lanjut di sini.Jika Anda tidak menggunakan jQuery, Anda dapat melakukan ini:
Atau sebagai alternatif:
... yang menangani kemungkinan yang
e.which
mungkin terjadi0
(dengan mengembalikannya0
pada akhirnya, menggunakan operator JavaScript yang sangat kuat||
).sumber
var key = event.which || event.keyCode;
Itu akan digunakanevent.which
jika itu didefinisikan dan bukan falsey, atauevent.keyCode
jikawhich
tidak didefinisikan atau falsey. Secara teknis saya mungkin harus melakukanvar key = typeof event.which === "undefined" ? event.keyCode : event.which;
tetapi jikaevent.which
itu0
(mungkinkah demikian0
?), Saya tidak akan peduli dengan hal-hal yang saya lakukan.which
, yang saya pikir hanya disediakan oleh jQuery tapi saya tidak 100% yakin, tetapi seharusnya Anda mulai melihat perbedaan browser)which
disediakan untukkeypress
semua browser kecuali IE. Dan quirksmode tidak resmi di sini. Sebagai referensi, tautan yang diposting @TJ Crowder jauh lebih baik: unixpapa.com/js/key.html .which
properti acara bisa nol, dan ini bisa membuat perbedaan besar untuk sebagian besar aplikasi. Misalnya, kunci yang tidak dapat dicetak di Firefox memilikiwhich
properti nol dankeyCode
properti yang sama dengankeydown
. Tombol Beranda memiliki angkakeyCode
36 pada PC saya di Firefox, yang merupakan kode karakter untuk "$", yang akan membuatnya tidak mungkin untuk membedakan antara pengguna yang menekan tombol Rumah dan pengguna yang mengetik $ karakter menggunakanevent.which || event.keyCode
.jQuery menjadi normal
event.which
tergantung pada apakahevent.which
,event.keyCode
atauevent.charCode
didukung oleh browser:Manfaat tambahan
.which
adalah bahwa jQuery juga melakukannya untuk klik mouse:sumber
var key = event.which || event.charCode || event.keyCode
event.wich == null && ...
uji hanya nol atau tidak ditentukan.event.wich || ...
tes Anda untuk falsy (undefined, null, false, 0, '', dll)0
. Dan saya tidak berpikir memeriksa""
atau[]
menyakiti.Jika Anda tetap menggunakan vanilla Javascript, harap dicatat keyCode sekarang sudah tidak digunakan lagi dan akan dihapus:
https://developer.mozilla.org/en-US/docs/Web/API/KeyboardEvent/keyCode
Alih-alih gunakan: .key atau .code tergantung pada perilaku apa yang Anda inginkan: https://developer.mozilla.org/en-US/docs/Web/API/KeyboardEvent/code https://developer.mozilla.org/en -US / docs / Web / API / KeyboardEvent / key
Keduanya diimplementasikan pada browser modern.
sumber
key
bukancode
. Misalnya, jika Anda memiliki keyboard dengan tombol kontrol media, menekan tombol Putar / Jeda output "MediaPlayPause" untukkey
dan "" untukcode
.lihat ini: https://developer.mozilla.org/en-US/docs/Web/API/event.keyCode
Dalam peristiwa penekanan tombol, nilai Unicode dari tombol yang ditekan disimpan dalam properti keyCode atau charCode, tidak pernah keduanya. Jika tombol yang ditekan menghasilkan karakter (mis. 'A'), charCode diatur ke kode karakter tersebut, dengan menghormati huruf huruf. (Yaitu charCode memperhitungkan apakah tombol shift ditekan). Kalau tidak, kode tombol yang ditekan disimpan di keyCode. keyCode selalu diatur dalam peristiwa keydown dan keyup. Dalam kasus ini, charCode tidak pernah disetel. Untuk mendapatkan kode kunci terlepas dari apakah itu disimpan dalam keyCode atau charCode, kueri properti yang mana. Karakter yang dimasukkan melalui IME tidak mendaftar melalui keyCode atau charCode.
sumber
Saya akan merekomendasikan
event.key
saat ini. Dokumen MDN: https://developer.mozilla.org/en-US/docs/Web/API/KeyboardEvent/keyevent.KeyCode
danevent.which
keduanya memiliki peringatan usang yang tidak menyenangkan di bagian atas halaman MDN mereka:https://developer.mozilla.org/en-US/docs/Web/API/KeyboardEvent/keyCode https://developer.mozilla.org/en-US / docs / Web / API / KeyboardEvent / yang
Untuk tombol alfanumerik,
event.key
tampaknya diterapkan secara identik di semua browser. Untuk tombol kontrol (tab, enter, escape, dll),event.key
memiliki nilai yang sama di Chrome / FF / Safari / Opera tetapi nilai yang berbeda di IE10 / 11 / Edge (IEs tampaknya menggunakan versi spesifikasi yang lebih lama tetapi cocok satu sama lain sebagai 14 Januari 2018).Untuk kunci alfanumerik cek akan terlihat seperti:
Untuk karakter kontrol, Anda perlu melakukan sesuatu seperti:
Saya menggunakan contoh di sini untuk menguji pada beberapa browser (saya harus membuka di codepen dan mengedit agar berfungsi dengan IE10): https://developer.mozilla.org/en-US/docs/Web/API/KeyboardEvent/ kode
event.code
disebutkan dalam jawaban yang berbeda sebagai suatu kemungkinan, tetapi IE10 / 11 / Edge tidak mengimplementasikannya, jadi keluar jika Anda menginginkan dukungan IE.sumber
Pustaka Javascript yang kuat untuk mengambil input keyboard dan kombinasi tombol dimasukkan. Tidak memiliki dependensi.
http://jaywcjlove.github.io/hotkeys/
hotkeys memahami pengubah berikut:
⇧
,shift
,option
,⌥
,alt
,ctrl
,control
,command
, dan⌘
.Tombol khusus berikut dapat digunakan untuk cara pintas:
backspace
,tab
,clear
,enter
,return
,esc
,escape
,space
,up
,down
,left
,right
,home
,end
,pageup
,pagedown
,del
,delete
danf1
melaluif19
.sumber
event.keyCode
.Di Firefox, properti keyCode tidak berfungsi pada acara onkeypress (hanya akan mengembalikan 0). Untuk solusi lintas-browser, gunakan properti yang mana bersama dengan keyCode, misalnya:
sumber