¿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í .
10
, no 13
.
keypress
evento, el código clave será 10, pero keydown
o keyup
informará 13. Solo prueba Chrome
En 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én metaKey
.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
}
e.ctrlKey
detecta ⌃ Control
y e.metaKey
detecta ⌘ Command
. Use esto si desea que tanto Ctrl-Enter como Command-Enter activen el comportamiento.
e.keyCode
de 10
significa Ingresar además de 13
? La documentación de MDNkeyCode
enumera solo 13
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');
}
});
});
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 )
$('my_text_area').focus(function{ set_focus_flag });
//ctrl on key down set flag
//enter on key down = check focus flag, check ctrl flag
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();
}
});
if
... else if
" a un solo if (e.ctrlKey && (e.keyCode == 10 || e.keyCode == 13))
.