¿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.ctrlKeybandera 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.
keypressevento, el código clave será 10, pero keydowno keyupinformará 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:
keyCode10, no 13 ( informe de error ). Así que tenemos que comprobar cualquiera de los dos.ctrlKeyestá controlen Windows, Linux y macOS (no command). Vea también metaKey.ctrlKeycorresponde 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.ctrlKeydetecta ⌃ Controly e.metaKeydetecta ⌘ Command. Use esto si desea que tanto Ctrl-Enter como Command-Enter activen el comportamiento.
e.keyCodede 10significa Ingresar además de 13? La documentación de MDNkeyCode enumera solo 13como 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)).