Como faço para acionar algo quando o cursor está dentro de TEXTAREA e Ctrl+ Enteré pressionado? Usando jQuery . obrigado
Respostas:
Você pode usar o event.ctrlKey
sinalizador para ver se a Ctrltecla está pressionada, algo assim:
$('#textareaId').keydown(function (e) {
if (e.ctrlKey && e.keyCode == 13) {
// Ctrl-Enter pressed
}
});
Verifique o snippet acima aqui .
10
, não 13
.
keypress
evento, o código-chave será 10, mas keydown
ou keyup
reportará 13. Apenas teste cromo
Na verdade, este faz o truque e funciona em todos os navegadores:
if ((event.keyCode == 10 || event.keyCode == 13) && event.ctrlKey)
Link para js fiddle .
Notas:
keyCode
10, não 13 ( relatório de bug ). Portanto, precisamos verificar qualquer um.ctrlKey
está controlno Windows, Linux e macOS (não command). Veja também metaKey
.ctrlKey
corresponde à tecla Command em Macs?
if ((e.keyCode == 10 || e.keyCode == 13) && (e.ctrlKey || e.metaKey))
Solução universal
Isso também oferece suporte ao macOS: Ctrl+ Entere ⌘ Command+ Enterserão aceitos.
if ((e.ctrlKey || e.metaKey) && (e.keyCode == 13 || e.keyCode == 10)) {
// do something
}
e.ctrlKey
detecta ⌃ Control
e e.metaKey
detecta ⌘ Command
. Use-o se quiser que Ctrl-Enter e Command-Enter acionem o comportamento.
e.keyCode
de 10
para significar Enter além de 13
? A documentação MDNkeyCode
lista apenas 13
como um valor possível para Enter, testado em vários navegadores e sistemas operacionais.
Eu encontrei respostas de outras pessoas incompletas ou incompatíveis entre navegadores.
Este código funciona no Google Chrome.
$(function ()
{
$(document).on("keydown", "#textareaId", function(e)
{
if ((e.keyCode == 10 || e.keyCode == 13) && e.ctrlKey)
{
alert('ctrl+enter');
}
});
});
Isso pode ser estendido para um plug-in JQuery simples, mas flexível, como em:
$.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);
}
})
})
}
portanto
$('textarea').enterKey(function() {$(this).closest('form').submit(); }, 'ctrl')
deve enviar um formulário quando o usuário pressiona ctrl-enter com foco na área de texto desse formulário.
(Com agradecimentos a https://stackoverflow.com/a/9964945/1017546 )
Talvez um pouco tarde para o jogo, mas aqui está o que eu uso. Também forçará o envio do formulário que é o destino atual do 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
” para um único if (e.ctrlKey && (e.keyCode == 10 || e.keyCode == 13))
.