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.ctrlKeydrapeau 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 .
10pas 13.
keypressévénement, le code clé sera 10, mais keydownou keyupsignalera 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:
keyCode10, pas 13 ( rapport de bogue ). Nous devons donc vérifier l'un ou l'autre.ctrlKeyest controlsur Windows, Linux et macOS (pas command). Voir aussi metaKey.ctrlKeycorrespond-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.ctrlKeydétecte ⌃ Controlet e.metaKeydétecte ⌘ Command. Utilisez cette option si vous souhaitez à la fois Ctrl-Entrée et Commande-Entrée pour déclencher le comportement.
e.keyCodede 10à dire Entrez en plus 13? La documentation MDNkeyCode répertorie uniquement 13comme 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)).