204 votes

jQuery : keyPress Backspace ne se déclenche pas ?

Je me demande ce que je fais de mal :

$(".s").keypress(function(e) {
   switch (e.keyCode) {
      case 8: // Backspace
      //console.log('backspace');
      case 9: // Tab
      case 13: // Enter
      case 37: // Left
      case 38: // Up
      case 39: // Right
      case 40: // Down
         break;

      default:
         doSearch();
   }
});

Je veux que mon doSearch() qui doit également être déclenchée lorsque je touche la fonction Backspace clé. Pour l'instant, il ne se passe absolument rien lorsque j'appuie sur Backspace dans Chrome et Safari.

Des idées ?

0 votes

Vous pouvez essayer ce plugin jQuery code.google.com/p/js-hotkeys et utiliser l'alias de la touche "backspace".

3 votes

Il ne fonctionne pas sur chrome mais fonctionne sur Firefox.

0 votes

Désolé pour le nécropostage, mais il convient de noter que e.which est préféré à e.keyCode.

351voto

Jonathon Bolster Points 8663

Utilice keyup au lieu de keypress . Cela permet d'obtenir tous les codes de touche lorsque l'utilisateur appuie sur quelque chose.

44 votes

Pourquoi keyup le feu pour Backspace lorsque keypress ne le fera pas ?

1 votes

C'est le cas. Le fait d'appuyer sur une touche déclenche le retour arrière, mais pas l'appui sur une touche -> bizarre. Est-il possible de vérifier également si deux touches sont appuyées, comme cmd-c, ou cmd-v, ou cmd-a ?

19 votes

En fait, ça dépend de la clé. Vous voulez utiliser keypress para Enter clé, keydown para Backspace et ainsi de suite ; sinon, vous constaterez que vos événements dans certains navigateurs ne fonctionnent pas vraiment comme vous le souhaitez, en particulier lorsque vous voulez empêcher le comportement par défaut de la touche. Si vous utilisez la mauvaise méthode, soit votre événement n'est pas capturé du tout (comme c'est le cas pour Backspace), soit vous ne pouvez pas l'empêcher, puisqu'il se produit déjà avant que votre code de gestion des événements ne l'atteigne.

34voto

Rob Points 151

J'ai rencontré ce problème moi-même. J'ai utilisé .on donc ça a l'air un peu différent mais j'ai fait ça :

 $('#element').on('keypress', function() {
   //code to be executed
 }).on('keydown', function(e) {
   if (e.keyCode==8)
     $('element').trigger('keypress');
 });

J'ajoute mon tour de travail ici. J'avais besoin de supprimer le nom de famille tapé par l'utilisateur, alors j'ai fait ceci en jQuery.

  $(this).bind("keydown", function (event) {
        // Allow: backspace, delete
        if (event.keyCode == 46 || event.keyCode == 8) 
        {
            var tempField = $(this).attr('name');
            var hiddenID = tempField.substr(tempField.indexOf('_') + 1);
            $('#' + hiddenID).val('');
            $(this).val('')
            return;
        }  // Allow: tab, escape, and enter
        else if (event.keyCode == 9 || event.keyCode == 27 || event.keyCode == 13 ||
        // Allow: Ctrl+A
        (event.keyCode == 65 && event.ctrlKey === true) ||
        // Allow: home, end, left, right
        (event.keyCode >= 35 && event.keyCode <= 39)) {
            // let it happen, don't do anything
            return;
        }
        else 
        {
            // Ensure that it is a number and stop the keypress
            if (event.shiftKey || (event.keyCode < 48 || event.keyCode > 57) &&       (event.keyCode < 96 || event.keyCode > 105)) 
            {
                event.preventDefault();
            }
        }
    });

1 votes

Cela fonctionne avec firefox si vous utilisez event.which au lieu de event.keyCode api.jquery.com/event.which

11voto

Marcos Nunes Points 79

Si vous voulez déclencher l'événement uniquement en cas de modification de votre entrée, utilisez :

$('.s').bind('input', function(){
  console.log("search!");
  doSearch();
});

1 votes

input ne respecte pas non plus les KeyCodes. Cela ne fonctionnerait pas non plus.

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