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 .
10
pas 13
.
keypress
événement, le code clé sera 10, mais keydown
ou keyup
signalera 13. Uniquement test chrome
En 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 aussi metaKey
.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
}
e.ctrlKey
détecte ⌃ Control
et e.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
de 10
à dire Entrez en plus 13
? La documentation MDNkeyCode
répertorie uniquement 13
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');
}
});
});
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 )
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();
}
});
if
… else if
» en un seul if (e.ctrlKey && (e.keyCode == 10 || e.keyCode == 13))
.