web-dev-qa-db-fra.com

Ctrl + Entrée jQuery dans TEXTAREA

Comment déclencher quelque chose lorsque le curseur est à l'intérieur de TEXTAREA et Ctrl+Enter est pressé? Utilisation de jQuery. Merci

80
HP.

Vous pouvez utiliser le drapeau event.ctrlKey pour voir si le Ctrl la touche est enfoncée, quelque chose comme ceci:

$('#textareaId').keydown(function (e) {

  if (e.ctrlKey && e.keyCode == 13) {
    // Ctrl-Enter pressed
  }
});

Vérifiez l'extrait de code ci-dessus ici .

114
CMS

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

126
Yaroslav Yakovlev

Solution universelle

Prend également en charge OS X.

if ((e.ctrlKey || e.metaKey) && (e.keyCode == 13 || e.keyCode == 10)) {
    // do something
}
49

J'ai trouvé des réponses incomplètes ou incompatibles entre navigateurs.

Ce code fonctionne Google Chrome. 

$(function ()
{
    $(document).on("keydown", "#textareaId", function(e)
    {
        if ((e.keyCode == 10 || e.keyCode == 13) && e.ctrlKey)
        {
            alert('ctrl+enter');
        }
    });
});
4
Valamas

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);
            }
        })
    })
}

Ainsi

$('textarea').enterKey(function() {$(this).closest('form').submit(); }, 'ctrl')

devrait soumettre un formulaire lorsque l'utilisateur appuie sur ctrl-enter en mettant l'accent sur la zone de texte de ce formulaire.

(Merci à https://stackoverflow.com/a/9964945/1017546 )

2
joeln
$('my_text_area').focus(function{ set_focus_flag });

//ctrl on key down set flag

//enter on key down = check focus flag, check ctrl flag
0
idrumgood

Peut-être un peu tard pour le jeu, mais voici ce que j'utilise. Cela forcera également à soumettre le 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();
    }
});
0
Barry Chapman

vous devez d'abord définir un drapeau lorsque Ctrl est appuyé, faites ceci onkeydown. alors vous devez vérifier la keydown de enter. désélectionner le drapeau lorsque vous voyez un keyup pour Ctrl.

0
mkoryak