Saya memiliki dua fungsi. Saat enter ditekan, fungsi berjalan dengan benar tetapi saat escape ditekan, fungsi itu tidak. Berapa nomor yang benar untuk kunci melarikan diri?
$(document).keypress(function(e) {
if (e.which == 13) $('.save').click(); // enter (works as expected)
if (e.which == 27) $('.cancel').click(); // esc (does not work)
});
javascript
jquery
Shishant
sumber
sumber
document.addEventListener("keydown", e => console.log(e.keyCode))
ke konsol browser Anda, klik ke jendela dan tekan tombol yang Anda cari.Jawaban:
Coba dengan acara keyup :
sumber
keydown
akan meniru perilaku asli - setidaknya di Windows di mana menekan ESC atau Kembali dalam dialog akan memicu tindakan sebelum kunci dilepaskan.Daripada meng-hardcode nilai kode kunci dalam fungsi Anda, pertimbangkan untuk menggunakan konstanta bernama untuk menyampaikan makna Anda dengan lebih baik:
Beberapa browser (seperti FireFox, tidak yakin yang lain) mendefinisikan
KeyEvent
objek global yang mengekspos jenis konstanta ini untuk Anda. Pertanyaan SO ini menunjukkan cara yang bagus untuk mendefinisikan objek itu di browser lain juga.sumber
0x1B
dan Enter adalah0x0D
, kan?(Jawaban diambil dari komentar saya sebelumnya )
Anda perlu menggunakan
keyup
daripadakeypress
. misalnya:keypress
tampaknya tidak ditangani secara konsisten di antara browser (coba demo di http://api.jquery.com/keypress di IE vs Chrome vs Firefox. Terkadangkeypress
tidak mendaftar, dan nilai untuk 'yang' dan ' keyCode 'bervariasi) sedangkankeyup
konsisten.Karena ada beberapa diskusi tentang
e.which
vse.keyCode
: Catatan itue.which
adalah nilai jquery-dinormalisasi dan yang direkomendasikan untuk digunakan:(dari http://api.jquery.com/event.which/ )
sumber
keypress
melarikan diri melakukannya dengan benar.keypress
dimaksudkan untuk menembak hanya ketika kunci menghasilkan karakter sedangkankeyup
api selalu. developer.mozilla.org/en-US/docs/Web/Events/keypressUntuk menemukan kode kunci untuk tombol apa saja, gunakan fungsi sederhana ini:
sumber
27
adalah kode untuk kunci pelarian. :)sumber
Taruhan terbaik Anda adalah
Ringkasan
which
lebih disukai daripadakeyCode
karena dinormalisasikeyup
lebih disukai daripadakeydown
karena keydown dapat terjadi beberapa kali jika pengguna terus menekannya.keypress
kecuali Anda ingin mengambil karakter yang sebenarnya.Yang menarik, Bootstrap menggunakan keydown dan keyCode dalam komponen dropdown-nya (mulai 3.0.2)! Saya pikir itu mungkin pilihan yang buruk di sana.
Cuplikan terkait dari JQuery doc
Item lain yang menarik: Perpustakaan JavaScript Keypress
sumber
Coba plugin jEscape ( unduh dari google drive )
atau dapatkan kode kunci untuk cross browser
mungkin Anda bisa menggunakan saklar
sumber
Kode Anda berfungsi dengan baik. Kemungkinan besar jendela itu tidak fokus. Saya menggunakan fungsi serupa untuk menutup kotak iframe dll.
sumber
Saya sedang mencoba melakukan hal yang sama dan itu mengganggu saya. Di firefox, tampaknya jika Anda mencoba melakukan beberapa hal ketika tombol escape ditekan, itu akan terus memproses kunci escape yang kemudian membatalkan apa pun yang Anda coba lakukan. Lansiran berfungsi dengan baik. Tetapi dalam kasus saya, saya ingin kembali ke sejarah yang tidak berhasil. Akhirnya tahu bahwa saya harus memaksa propagasi acara untuk berhenti seperti yang ditunjukkan di bawah ini ...
sumber
Untuk menjelaskan di mana jawaban lain belum; masalahnya adalah penggunaan Anda
keypress
.Mungkin acara ini hanya salah nama tetapi
keypress
didefinisikan untuk memecat kapan . Yaitu teks. Sedangkan yang Anda inginkan adalah / , yang menyala kapan saja (sebelum atau sesudah, masing-masing) . Yaitu hal-hal di keyboard.when an actual
character
is being inserted
keydown
keyup
the user depresses a
key
Perbedaannya muncul di sini karena
esc
merupakan karakter kontrol (secara harfiah ' karakter non-cetak') dan karenanya tidak menulis teks apa pun, sehingga bahkan tidak diaktifkankeypress
.enter
aneh, karena meskipun Anda menggunakannya sebagai karakter kontrol (yaitu untuk mengontrol UI), itu masih memasukkan karakter baris baru, yang akan diaktifkankeypress
.Sumber: quirksmode
sumber
Untuk mendapatkan kode hex untuk semua karakter: http://asciitable.com/
sumber
Hanya memposting jawaban yang diperbarui dari
e.keyCode
yang dianggap TERDEPAN pada MDN .Sebaliknya Anda harus memilih
e.key
yang mendukung nama bersih untuk semuanya. Ini pasta salin yang relevansumber
Esc
daripada standarEscape
.Pustaka Javascript yang kuat untuk mengambil input keyboard dan kombinasi tombol dimasukkan. Tidak memiliki dependensi.
http://jaywcjlove.github.io/hotkeys/
hotkeys memahami pengubah berikut: ⇧, shiftoption⌥altctrlcontrolcommand, dan ⌘.
Tombol khusus berikut dapat digunakan untuk cara pintas: backspacetab, clear, enter, return, esc, escape, space, up, down, left, right, home, end, pageup, pagedown, del, deletedan f1melalui f19.
sumber
Saya selalu menggunakan keyup dan e.yang menangkap kunci melarikan diri.
sumber
Saya tahu pertanyaan ini menanyakan tentang jquery, tetapi bagi mereka yang menggunakan jqueryui, ada konstanta untuk banyak kode kunci:
http://api.jqueryui.com/jQuery.ui.keyCode/
sumber