Come faccio ad attivare qualcosa quando il cursore si trova all'interno di TEXTAREA e viene premuto Ctrl+ Enter? Utilizzando jQuery . Grazie
Risposte:
Puoi usare il event.ctrlKey
flag per vedere se il Ctrltasto è premuto, qualcosa del genere:
$('#textareaId').keydown(function (e) {
if (e.ctrlKey && e.keyCode == 13) {
// Ctrl-Enter pressed
}
});
Controlla lo snippet sopra qui .
10
, no 13
.
keypress
evento, il codice chiave sarà 10, ma keydown
o keyup
riporterà 13. Solo test chrome
In realtà questo fa il trucco e funziona in tutti i browser:
if ((event.keyCode == 10 || event.keyCode == 13) && event.ctrlKey)
collegamento a js fiddle .
Appunti:
keyCode
10, non 13 ( segnalazione di bug ). Quindi dobbiamo controllare entrambi.ctrlKey
è controlsu Windows, Linux e macOS (non command). Vedi anche metaKey
.ctrlKey
corrisponde al tasto Comando sui Mac?
if ((e.keyCode == 10 || e.keyCode == 13) && (e.ctrlKey || e.metaKey))
Soluzione universale
Questo supporta anche macOS: sia Ctrl+ Enterche ⌘ Command+Enter saranno accettati .
if ((e.ctrlKey || e.metaKey) && (e.keyCode == 13 || e.keyCode == 10)) {
// do something
}
e.ctrlKey
rileva ⌃ Control
e e.metaKey
rileva ⌘ Command
. Usa questo se vuoi che sia Ctrl-Invio che Comando-Invio attivino il comportamento.
e.keyCode
di 10
significa Invio 13
? La documentazione MDNkeyCode
elenca solo 13
come possibile valore per Invio, testato su più browser e sistemi operativi.
Ho trovato risposte di altri o incomplete o non compatibili con cross-browser.
Questo codice funziona con Google Chrome.
$(function ()
{
$(document).on("keydown", "#textareaId", function(e)
{
if ((e.keyCode == 10 || e.keyCode == 13) && e.ctrlKey)
{
alert('ctrl+enter');
}
});
});
Questo può essere esteso a un plug-in JQuery semplice ma flessibile come in:
$.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);
}
})
})
}
Così
$('textarea').enterKey(function() {$(this).closest('form').submit(); }, 'ctrl')
dovrebbe inviare un modulo quando l'utente preme ctrl-invio con il focus sull'area di testo di quel modulo.
(Grazie a https://stackoverflow.com/a/9964945/1017546 )
Forse un po 'tardi per il gioco, ma ecco cosa uso. Forzerà anche l'invio del modulo che è l'obiettivo corrente del cursore.
$(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
" a un singolo if (e.ctrlKey && (e.keyCode == 10 || e.keyCode == 13))
.