71 votes

jquery : comment attraper la touche entrée et changer l'événement en tabulation ?

Je veux une solution jquery, je dois être proche, que faut-il faire ?

$('html').bind('keypress', function(e)
{
     if(e.keyCode == 13)
     {
         return e.keyCode = 9; //set event key to tab
     }
});

Je peux renvoyer false et cela empêche la touche entrée d'être pressée, j'ai pensé que je pourrais juste changer le keyCode en 9 pour le faire tab mais cela ne semble pas fonctionner. Je dois être proche, que se passe-t-il ?

73voto

Sarfraz Points 168484

Voici une solution :

$('input').on("keypress", function(e) {
            /* ENTER PRESSED*/
            if (e.keyCode == 13) {
                /* FOCUS ELEMENT */
                var inputs = $(this).parents("form").eq(0).find(":input");
                var idx = inputs.index(this);

                if (idx == inputs.length - 1) {
                    inputs[0].select()
                } else {
                    inputs[idx + 1].focus(); //  handles submit buttons
                    inputs[idx + 1].select();
                }
                return false;
            }
        });

32voto

Bharat Points 735

Cela fonctionne parfaitement !

 $('input').keydown( function(e) {
        var key = e.charCode ? e.charCode : e.keyCode ? e.keyCode : 0;
        if(key == 13) {
            e.preventDefault();
            var inputs = $(this).closest('form').find(':input:visible');
            inputs.eq( inputs.index(this)+ 1 ).focus();
        }
    });

9voto

rpearce Points 496

Pourquoi pas quelque chose de simple comme ça ?

$(document).on('keypress', 'input', function(e) {

  if(e.keyCode == 13 && e.target.type !== 'submit') {
    e.preventDefault();
    return $(e.target).blur().focus();
  }

});

De cette façon, vous ne déclenchez pas l'envoi si vous n'êtes pas déjà concentré sur le type d'entrée "submit", et vous vous retrouvez là où vous vous étiez arrêté. Cela fonctionne également pour les entrées qui sont ajoutées dynamiquement à la page.

Remarque : La fonction blur() se trouve devant la fonction focus() pour ceux qui auraient des écouteurs d'événements "on blur". Il n'est pas nécessaire pour que le processus fonctionne.

7voto

Joel Purra Points 7366

PlusAsTab : Un plugin jQuery pour utiliser la touche plus du pavé numérique comme équivalent de la touche de tabulation.

PlusAsTab est également configurable pour utiliser la touche entrée comme dans cette démo . Voir certains de mes les réponses plus anciennes à cette question .

Dans votre cas, il s'agit de remplacer la touche d'entrée par la fonction de tabulation pour l'ensemble de la page (après avoir défini la touche d'entrée comme tabulation dans les options).

<body data-plus-as-tab="true">
    ...
</body>

5voto

Manuel Guzman Points 48

Basé sur le plugin de Ben, cette version gère la sélection et vous pouvez passer une option à allowSubmit. par exemple. $("#form").enterAsTab({ 'allowSubmit': true}); Cela permettra d'entrer pour soumettre le formulaire si le bouton "submit" gère l'événement.

(function( $ ){
    $.fn.enterAsTab = function( options ) {  
    var settings = $.extend( {
       'allowSubmit': false
    }, options);
    this.find('input, select').live("keypress", {localSettings: settings}, function(event) {
        if (settings.allowSubmit) {
        var type = $(this).attr("type");
        if (type == "submit") {
            return true;
        } 
    }
    if (event.keyCode == 13 ) {
        var inputs =   $(this).parents("form").eq(0).find(":input:visible:not(disabled):not([readonly])");
        var idx = inputs.index(this);
        if (idx == inputs.length - 1) {
           idx = -1;
       } else {
           inputs[idx + 1].focus(); // handles submit buttons
      }
        try {
            inputs[idx + 1].select();
            }
        catch(err) {
            // handle objects not offering select
            }
        return false;
    }
});
  return this;
};
})( jQuery );

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