Bagaimana cara memicu sesuatu saat kursor berada dalam TEXTAREA dan Ctrl+ Enterditekan? Menggunakan jQuery . Terima kasih
92
Bagaimana cara memicu sesuatu saat kursor berada dalam TEXTAREA dan Ctrl+ Enterditekan? Menggunakan jQuery . Terima kasih
Jawaban:
Anda dapat menggunakan
event.ctrlKey
bendera untuk melihat apakah Ctrltombolnya ditekan, seperti ini:$('#textareaId').keydown(function (e) { if (e.ctrlKey && e.keyCode == 13) { // Ctrl-Enter pressed } });
Periksa cuplikan di atas di sini .
sumber
10
, bukan13
.keypress
peristiwa, kode kunci akan menjadi 10, tetapikeydown
ataukeyup
akan melaporkan 13. Hanya uji chromeSebenarnya yang ini melakukan trik dan berfungsi di semua browser:
if ((event.keyCode == 10 || event.keyCode == 13) && event.ctrlKey)
link ke js fiddle .
Catatan:
keyCode
10, bukan 13 ( laporan bug ). Jadi kita perlu memeriksa keduanya.ctrlKey
ada controldi Windows, Linux, dan macOS (bukan command). Lihat jugametaKey
.sumber
ctrlKey
sesuai dengan tombol Command di Mac?if ((e.keyCode == 10 || e.keyCode == 13) && (e.ctrlKey || e.metaKey))
Solusi universal
Ini juga mendukung macOS: Ctrl+ Enterdan ⌘ Command+ Enterakan diterima.
if ((e.ctrlKey || e.metaKey) && (e.keyCode == 13 || e.keyCode == 10)) { // do something }
sumber
e.ctrlKey
mendeteksi⌃ Control
dane.metaKey
mendeteksi⌘ Command
. Gunakan ini jika Anda ingin Ctrl-Enter dan Command-Enter memicu perilaku.e.keyCode
dari10
to berarti Enter dan13
? The MDNkeyCode
dokumentasi daftar hanya13
sebagai nilai yang mungkin untuk Masukkan, diuji di beberapa browser dan sistem operasi.Saya menemukan jawaban orang lain tidak lengkap atau tidak kompatibel lintas-browser.
Kode ini berfungsi google chrome.
$(function () { $(document).on("keydown", "#textareaId", function(e) { if ((e.keyCode == 10 || e.keyCode == 13) && e.ctrlKey) { alert('ctrl+enter'); } }); });
sumber
Ini dapat diperluas ke plugin JQuery yang sederhana namun fleksibel seperti di:
$.fn.enterKey = function (fnc, mod) { return this.each(function () { $(this).keypress(function (ev) { var keycode = (ev.keyCode ? ev.keyCode : ev.which); if ((keycode == '13' || keycode == '10') && (!mod || ev[mod + 'Key'])) { fnc.call(this, ev); } }) }) }
Jadi
$('textarea').enterKey(function() {$(this).closest('form').submit(); }, 'ctrl')
harus mengirimkan formulir ketika pengguna menekan ctrl-enter dengan fokus pada area teks formulir itu.
(Dengan terima kasih kepada https://stackoverflow.com/a/9964945/1017546 )
sumber
$('my_text_area').focus(function{ set_focus_flag }); //ctrl on key down set flag //enter on key down = check focus flag, check ctrl flag
sumber
pertama Anda harus mengatur bendera saat Ctrlditekan, lakukan ini saat tombol turun. maka Anda harus memeriksa keydown dari enter. hapus tanda ketika Anda melihat keyup untuk Ctrl.
sumber
Mungkin agak terlambat ke permainan, tapi inilah yang saya gunakan. Ini juga akan memaksa pengiriman formulir yang merupakan target kursor saat ini.
$(document.body).keypress(function (e) { var $el = $(e.target); if (e.ctrlKey && e.keyCode == 10) { $el.parents('form').submit(); } else if (e.ctrlKey && e.keyCode == 13) { $el.parents('form').submit(); } });
sumber
if
...else if
" menjadi satuif (e.ctrlKey && (e.keyCode == 10 || e.keyCode == 13))
.