2009-11-05 15 views
69

Come faccio innescare qualcosa quando il cursore si trova all'interno TEXTAREA e Ctrl +Immettere viene premuto? Utilizzo di jQuery. GrazieCtrl + Invio jQuery in TEXTAREA

+0

la risposta che hai accettato non funziona. Si prega di cambiare la risposta accettata – peter

risposta

101

È possibile utilizzare il flag event.ctrlKey per vedere se il chiave Ctrl viene premuto, qualcosa di simile:

$('#textareaId').keydown(function (e) { 

    if (e.ctrlKey && e.keyCode == 13) { 
    // Ctrl-Enter pressed 
    } 
}); 

Verificare quanto sopra frammento di here.

+11

Questo non funziona in Google Chrome. Quando viene premuto Ctrl + Invio, il codice chiave è '10', non' 13'. – Znarkus

+30

Questo non funziona. La soluzione di Yarolslav Yakovlev di seguito funziona correttamente. Per favore cambia la risposta accettata per risparmiare tempo. –

+0

Non funziona anche in Opera. –

0

prima devi impostare una bandiera quando Ctrl viene premuto, fare questo onkeydown. quindi devi controllare il keydown di invio. disattiva il flag quando vedi una chiave per Ctrl.

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 
117

In realtà questo si fa il trucco e funziona in tutti i browser:

if ((event.keyCode == 10 || event.keyCode == 13) && event.ctrlKey) 

link per js fiddle

+0

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

+0

Basta chiamare 'evento':' if ((event.keyCode == 10 || event.keyCode == 13) && event.ctrlKey) ' – terales

+2

@Yaroslav: Puoi dirci a cosa serve" event.keyCode == 10 "in risposta. –

4

ho trovato le risposte degli altri o incompleti o non cross-browser compatibile.

Questo codice funziona google chrome.

$(function() 
{ 
    $(document).on("keydown", "#textareaId", function(e) 
    { 
     if ((e.keyCode == 10 || e.keyCode == 13) && e.ctrlKey) 
     { 
      alert('ctrl+enter'); 
     } 
    }); 
}); 
+1

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

+0

@Valamas: Puoi dirci a cosa serve "event.keyCode == 10" nella tua risposta. –

+0

I love copy & paster answer – xamde

2

Questo può essere esteso ad un semplice ma flessibile plug JQuery come:

$.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') 

devono presentare un modulo quando l'utente preme Ctrl-entrare con concentrarsi sulla textarea di quel modulo.

(Si ringrazia https://stackoverflow.com/a/9964945/1017546)

27

soluzione universale

Supporta OS X pure.

if ((e.ctrlKey || e.metaKey) && (e.keyCode == 13 || e.keyCode == 10)) { 
    // do something 
} 
+9

Non ignorare questa risposta perché ha un punteggio più basso, è solo una risposta più recente, in realtà è meglio. –

0

Forse un po 'tardi al gioco, ma ecco quello che uso. Forza anche l'invio del modulo che è l'attuale bersaglio 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(); 
    } 
});