Ctrl + Invio jQuery in TEXTAREA


92

Come faccio ad attivare qualcosa quando il cursore si trova all'interno di TEXTAREA e viene premuto Ctrl+ Enter? Utilizzando jQuery . Grazie


la risposta che hai accettato non funziona. Modifica la risposta accettata
peterchaula

Risposte:


128

Puoi usare il event.ctrlKeyflag 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 .


15
Questo non funziona in Google Chrome. Quando si preme Ctrl + Invio il codice del tasto è 10, no 13.
Znarkus

39
Questo non funziona. La soluzione di Yarolslav Yakovlev di seguito funziona correttamente. Modifica la risposta accettata per risparmiare tempo.
Phil Ricketts

1
@ Replete Quale ambiente hai testato? Esiste documentazione su keyCode 10?
Sanghyun Lee

keyCode 10 non dovrebbe più apparire
swissspidy

quando si attiva l' keypressevento, il codice chiave sarà 10, ma keydowno keyupriporterà 13. Solo test chrome
iulo

137

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:

  • In Chrome su Windows e Linux, enterverrebbe registrato come keyCode10, non 13 ( segnalazione di bug ). Quindi dobbiamo controllare entrambi.
  • ctrlKeyè controlsu Windows, Linux e macOS (non command). Vedi anche metaKey.

Il violino non funziona in Firefox 27, cosa c'è che non va?
CodeManX

4
@Yaroslav: Puoi dire per favore qual è l'uso di "event.keyCode == 10" nella tua risposta.
Shashank.gupta40

3
Se qualcuno sta ancora chiedendo keyCode 10 e altre cose di Chrome, legga questo .
user2422869

1
@YaroslavYakovlev ctrlKeycorrisponde al tasto Comando sui Mac?
Jacob Stamm

2
Per supportare anche Mac:if ((e.keyCode == 10 || e.keyCode == 13) && (e.ctrlKey || e.metaKey))
Ilya Manyahin

81

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
}

15
Non ignorare questa risposta perché ha un punteggio inferiore, è solo una risposta più recente, in realtà è migliore.
David Bell

1
Spiegazione della prima parte: su macOS, e.ctrlKeyrileva ⌃ Controle e.metaKeyrileva ⌘ Command. Usa questo se vuoi che sia Ctrl-Invio che Comando-Invio attivino il comportamento.
Rory O'Kane

Puoi spiegare perché oltre a accettare un e.keyCodedi 10significa Invio 13? La documentazione MDNkeyCode elenca solo 13come possibile valore per Invio, testato su più browser e sistemi operativi.
Rory O'Kane

1
@ RoryO'Kane Alcune versioni di Chrome su Windows e Linux usano il valore 10, apparentemente.
Flimm

4

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');
        }
    });
});

2
Potresti considerare di migliorare la tua risposta aggiungendo ulteriori spiegazioni? Grazie :) Altrimenti questa sarebbe solo una risposta di bassa qualità a una domanda di bassa qualità.
Theolodis

@Valamas: puoi per favore dire qual è l'uso di "event.keyCode == 10" nella tua risposta.
Shashank.gupta40

1
Adoro le risposte di copy & paster
Dr. Max Völkel

2

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 )


0
$('my_text_area').focus(function{ set_focus_flag });

//ctrl on key down set flag

//enter on key down = check focus flag, check ctrl flag

0

per prima cosa devi impostare una bandiera quando Ctrlviene premuto, fallo onkeydown. quindi devi controllare il keydown di invio. rimuovi il flag quando vedi un keyup per Ctrl.


0

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();
    }
});

Potresti semplificare il " if... else if" a un singolo if (e.ctrlKey && (e.keyCode == 10 || e.keyCode == 13)).
Rory O'Kane
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.