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
}
});
10
, bukan 13
.
keypress
peristiwa, kode kunci akan menjadi 10, tetapi keydown
atau keyup
akan melaporkan 13. Hanya uji chrome
Sebenarnya 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 juga metaKey
.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
}
e.ctrlKey
mendeteksi ⌃ Control
dan e.metaKey
mendeteksi ⌘ Command
. Gunakan ini jika Anda ingin Ctrl-Enter dan Command-Enter memicu perilaku.
e.keyCode
dari 10
to berarti Enter dan 13
? The MDN keyCode
dokumentasi daftar hanya 13
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');
}
});
});
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 )
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();
}
});
if
... else if
" menjadi satu if (e.ctrlKey && (e.keyCode == 10 || e.keyCode == 13))
.