104 votes

La capture de la touche de TABULATION dans la zone de texte

Ici, sur un Débordement de Pile, je voudrais être en mesure d'utiliser l' Onglet clé au sein de l'ADM de l'éditeur de texte de la boîte à onglet sur quatre espaces. La façon dont elle est maintenant la touche Tab sauts mon curseur vers le bas pour les Balises.

Voter pour cette fonctionnalité à UserVoice: http://stackoverflow.uservoice.com/pages/general/suggestions/15889

Est-il un JavaScript qui permettra de saisir la touche de Tabulation dans la zone de texte avant qu'il se propage jusqu'à l'INTERFACE utilisateur?

Je comprends que certains navigateurs (c'est à dire FireFox) ne peut pas permettre cela. Comment sur une clé personnalisée-combo comme Maj+Tabou Ctrl+Q?

111voto

ScottKoon Points 2139

Même si vous capturez le keydown/événement keyup, ceux sont les seuls événements qui la touche de tabulation feux, vous avez encore besoin d'un moyen de prévenir l'action par défaut, le passage à l'élément suivant dans l'ordre de tabulation, de se produire.

Dans Firefox, vous pouvez appeler la "preventDefault()" de la méthode sur l'objet d'événement transmis à votre gestionnaire d'événements. Dans IE, vous devez retourner false à partir de l'événement de la poignée. La bibliothèque JQuery fournit une méthode preventDefault sur un objet d'événement qui fonctionne sous IE et FF.

<body>
<input type="text" id="myInput">
<script type="text/javascript">
    var myInput = document.getElementById("myInput");
    if(myInput.addEventListener ) {
        myInput.addEventListener('keydown',this.keyHandler,false);
    } else if(myInput.attachEvent ) {
        myInput.attachEvent('onkeydown',this.keyHandler); /* damn IE hack */
    }

    function keyHandler(e) {
        var TABKEY = 9;
        if(e.keyCode == TABKEY) {
            this.value += "    ";
            if(e.preventDefault) {
                e.preventDefault();
            }
            return false;
        }
    }
</script>
</body>

18voto

Lauren Points 1076

Je préfère onglet indentation pas de travail que la rupture de tabulation entre les éléments de formulaire.

Si vous souhaitez mettre en retrait pour mettre dans le code de la Démarque de la boîte, utilisez Ctrl+K (ou ⌘K sur un Mac).

Dans les termes de l'arrêt de l'action, jQuery (Débordement de Pile utilise) va s'arrêter d'un événement de propagation lorsque vous revenez faux à partir d'un rappel d'événement. Cela rend la vie plus facile pour travailler avec plusieurs navigateurs.

13voto

Tom Points 5872

La réponse précédente est bien, mais je suis un de ces gars qui est fermement contre le mélange comportement avec la présentation (mettre du JavaScript dans mon HTML) donc je préfère mettre mon la gestion des événements de la logique dans mes fichiers JavaScript. En outre, tous les navigateurs n'implémentent l'événement (ou e) de la même manière. Vous pouvez faire une vérification avant l'exécution de la logique:

document.onkeydown = TabExample;

6voto

Wally Lawless Points 3205

Je ne vous le conseille de changer le comportement par défaut d'une touche. Je le fais autant que possible sans toucher la souris, donc si vous faites ma touche tab ne pas passer au champ suivant dans un formulaire, je vais être très aggravés.

Une touche de raccourci peut être utile, cependant, surtout avec les grands blocs de code et de nidification. Maj-TAB est un mauvais choix, parce que, normalement, me prend à la précédente champ dans un formulaire. Peut-être un nouveau bouton sur les ADM de l'éditeur pour insérer un code-ONGLET, avec une touche de raccourci, ce serait possible?

3voto

Paul D. Waite Points 35456

Dans google Chrome sur Mac, alt-tab insère un caractère de tabulation dans un <textarea> champ.

En voici un: . Wee!

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X