¿Cómo puedo activar algo cuando el cursor está dentro de TEXTAREA y se presiona Ctrl+ Enter? Usando jQuery . Gracias
92
¿Cómo puedo activar algo cuando el cursor está dentro de TEXTAREA y se presiona Ctrl+ Enter? Usando jQuery . Gracias
Respuestas:
Puede usar la
event.ctrlKey
bandera para ver si la Ctrltecla está presionada, algo como esto:$('#textareaId').keydown(function (e) { if (e.ctrlKey && e.keyCode == 13) { // Ctrl-Enter pressed } });
Consulte el fragmento anterior aquí .
fuente
10
, no13
.keypress
evento, el código clave será 10, perokeydown
okeyup
informará 13. Solo prueba ChromeEn realidad, este hace el truco y funciona en todos los navegadores:
if ((event.keyCode == 10 || event.keyCode == 13) && event.ctrlKey)
enlace a js fiddle .
Notas:
keyCode
10, no 13 ( informe de error ). Así que tenemos que comprobar cualquiera de los dos.ctrlKey
está controlen Windows, Linux y macOS (no command). Vea tambiénmetaKey
.fuente
ctrlKey
corresponde a la tecla Comando en Mac?if ((e.keyCode == 10 || e.keyCode == 13) && (e.ctrlKey || e.metaKey))
Solución universal
Esto también es compatible con macOS: se aceptarán tanto Ctrl+ Entercomo ⌘ Command+ Enter.
if ((e.ctrlKey || e.metaKey) && (e.keyCode == 13 || e.keyCode == 10)) { // do something }
fuente
e.ctrlKey
detecta⌃ Control
ye.metaKey
detecta⌘ Command
. Use esto si desea que tanto Ctrl-Enter como Command-Enter activen el comportamiento.e.keyCode
de10
significa Ingresar además de13
? La documentación de MDNkeyCode
enumera solo13
como un valor posible para Enter, probado en múltiples navegadores y sistemas operativos.Encontré respuestas de otros incompletas o no compatibles con varios navegadores.
Este código funciona en google chrome.
$(function () { $(document).on("keydown", "#textareaId", function(e) { if ((e.keyCode == 10 || e.keyCode == 13) && e.ctrlKey) { alert('ctrl+enter'); } }); });
fuente
Esto se puede extender a un complemento JQuery simple pero flexible como en:
$.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); } }) }) }
Así
$('textarea').enterKey(function() {$(this).closest('form').submit(); }, 'ctrl')
debe enviar un formulario cuando el usuario presiona ctrl-enter con el foco en el área de texto de ese formulario.
(Gracias a https://stackoverflow.com/a/9964945/1017546 )
fuente
$('my_text_area').focus(function{ set_focus_flag }); //ctrl on key down set flag //enter on key down = check focus flag, check ctrl flag
fuente
primero tienes que establecer una bandera cuando Ctrlse presiona, haz esto en la tecla entonces tienes que comprobar la tecla de entrar. desarme la bandera cuando vea una tecla para Ctrl.
fuente
Quizás un poco tarde para el juego, pero esto es lo que uso. También forzará el envío del formulario que es el objetivo actual del cursor.
$(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(); } });
fuente
if
...else if
" a un soloif (e.ctrlKey && (e.keyCode == 10 || e.keyCode == 13))
.