Comment déclencher quelque chose lorsque le curseur est dans TEXTAREA et que Ctrl+ Enterest pressé? Utilisation de jQuery . Merci
92
Comment déclencher quelque chose lorsque le curseur est dans TEXTAREA et que Ctrl+ Enterest pressé? Utilisation de jQuery . Merci
Réponses:
Vous pouvez utiliser le
event.ctrlKey
drapeau pour voir si la Ctrltouche est enfoncée, quelque chose comme ceci:$('#textareaId').keydown(function (e) { if (e.ctrlKey && e.keyCode == 13) { // Ctrl-Enter pressed } });
Consultez l'extrait ci-dessus ici .
la source
10
pas13
.keypress
événement, le code clé sera 10, maiskeydown
oukeyup
signalera 13. Uniquement test chromeEn fait, celui-ci fait l'affaire et fonctionne dans tous les navigateurs:
if ((event.keyCode == 10 || event.keyCode == 13) && event.ctrlKey)
lien vers js fiddle .
Remarques:
keyCode
10, pas 13 ( rapport de bogue ). Nous devons donc vérifier l'un ou l'autre.ctrlKey
est controlsur Windows, Linux et macOS (pas command). Voir aussimetaKey
.la source
ctrlKey
correspond-il à la touche Commande sur Mac?if ((e.keyCode == 10 || e.keyCode == 13) && (e.ctrlKey || e.metaKey))
Solution universelle
Cela prend également en charge macOS: les Ctrl+ Enteret les ⌘ Command+ Enterseront acceptés.
if ((e.ctrlKey || e.metaKey) && (e.keyCode == 13 || e.keyCode == 10)) { // do something }
la source
e.ctrlKey
détecte⌃ Control
ete.metaKey
détecte⌘ Command
. Utilisez cette option si vous souhaitez à la fois Ctrl-Entrée et Commande-Entrée pour déclencher le comportement.e.keyCode
de10
à dire Entrez en plus13
? La documentation MDNkeyCode
répertorie uniquement13
comme valeur possible pour Enter, testée sur plusieurs navigateurs et systèmes d'exploitation.J'ai trouvé des réponses incomplètes ou non compatibles avec plusieurs navigateurs.
Ce code fonctionne avec Google Chrome.
$(function () { $(document).on("keydown", "#textareaId", function(e) { if ((e.keyCode == 10 || e.keyCode == 13) && e.ctrlKey) { alert('ctrl+enter'); } }); });
la source
Cela peut être étendu à un plugin JQuery simple mais flexible comme dans:
$.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); } }) }) }
Donc
$('textarea').enterKey(function() {$(this).closest('form').submit(); }, 'ctrl')
doit soumettre un formulaire lorsque l'utilisateur appuie sur Ctrl-Entrée en mettant l'accent sur la zone de texte de ce formulaire.
(Merci à https://stackoverflow.com/a/9964945/1017546 )
la source
$('my_text_area').focus(function{ set_focus_flag }); //ctrl on key down set flag //enter on key down = check focus flag, check ctrl flag
la source
vous devez d'abord définir un indicateur lorsque vous Ctrlappuyez sur, faites-le à la touche. alors vous devez vérifier le keydown de enter. annulez l'indicateur lorsque vous voyez un keyup pour Ctrl.
la source
Peut-être un peu tard dans le jeu, mais voici ce que j'utilise. Cela forcera également la soumission du formulaire qui est la cible actuelle du curseur.
$(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(); } });
la source
if
…else if
» en un seulif (e.ctrlKey && (e.keyCode == 10 || e.keyCode == 13))
.