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.