Empêcher BACKSPACE de naviguer en arrière avec jQuery (comme la page D'accueil de Google)

avis alors que sur la page d'accueil de Google, sans se concentrer sur aucun élément, en appuyant sur BACKSPACE mettra l'accent dans la barre d'outils de recherche au lieu de naviguer en arrière.

Comment puis-je accomplir?

je continue à rencontrer ce problème avec les utilisateurs de mon application. Ils ne se concentrent sur aucun élément et frappent BACKSPACE qui les jette hors de l'application.

34
demandé sur FastTrack 2012-06-20 06:40:58

9 réponses

Je lierais un gestionnaire d'événements à keydown et empêcherais l'action par défaut de cet événement si nous avons affaire à la touche backspace en dehors d'un textarea ou input :

$(document).on("keydown", function (e) {
    if (e.which === 8 && !$(e.target).is("input, textarea")) {
        e.preventDefault();
    }
});
59
répondu Andrew Whitaker 2012-06-20 02:48:40

j'aime vraiment la réponse D'Andrew Whitaker. Il va, cependant, toujours naviguer en arrière lorsqu'il est concentré sur une lecture, radio, ou case à cocher champ d'entrée et ne permettra pas backspace sur les éléments contentEditable si j'ai ajouté une légère modification. Le mérite revient à Andrew Whitaker.

$(document).on("keydown", function (e) {
    if (e.which === 8 && !$(e.target).is("input:not([readonly]):not([type=radio]):not([type=checkbox]), textarea, [contentEditable], [contentEditable=true]")) {
        e.preventDefault();
    }
});

pour le moment il semble nécessaire d'avoir toutes les variations [contentEditable] qui sont dans le HTML depuis [contentEditable] != [contentEditable = true].

22
répondu J.Money 2015-01-02 13:24:18

la façon dont Google fait ça est plutôt cool. Lorsque vous appuyez sur backspace, ils concentrent le champ de texte, empêchant les utilisateurs de naviguer en arrière!

vous pouvez essayer la même chose:

<script src="http://code.jquery.com/jquery.min.js" type="text/javascript"></script>
<input id="target" type="text" />

<script type="text/javascript">
$(document).keydown(function(e) { if (e.keyCode == 8) $('#target').focus(); });
</script>

Démo: http://jsfiddle.net/epinapala/TxG5p /

11
répondu Eswar Rajesh Pinapala 2018-09-25 19:59:15

Pour arrêter de naviguer simplement ce code fonctionne!

$(document).on("keydown", function (event) {        
   if (event.keyCode === 8) {
      event.preventDefault();
    }
  });

mais cela se produira même pour les champs d'entrée de type text/textarea. Afin de limiter les champs, vous pouvez utiliser

$(document).on("keydown", function (event) {
  if (event.which === 8 && !$(event.target).is("input, textarea")) {
   event.preventDefault();
  }
});

dans mon cas où j'avais un champ de texte pour calendar et chaque fois que je cliquais sur ce calendrier, sélectionnez date et appuyez sur backspace il naviguait de retour à la page précédente. Pour l'empêcher pour ce champ seulement j'ai simplement utilisé

$('#myField').on("keydown", function (event) {
  if (event.keyCode === 8 || event.which === 8) { 
   event.preventDefault(); 
  } 
});

j'ai pensé à mentionner pour certains pour aider ;-)

3
répondu Syed Ehtsham Abbas 2015-11-30 14:04:43

Voici une solution simple Testée sur IE, Chrome et Firefox.

$(document).on("keydown", function (event) {
// Chrome & Firefox || Internet Explorer
if (document.activeElement === document.body || document.activeElement === document.body.parentElement) {
    // SPACE (32) o BACKSPACE (8)
    if (event.keyCode === 32 || event.keyCode === 8) {
        event.preventDefault();
    }
}});
2
répondu spuentep 2015-05-22 04:08:47

c'est ancien, mais ces réponses vous permettront quand même de revenir en arrière et de naviguer lorsque vous êtes concentré sur un bouton radio. Vous souhaitez filtrer le type d'entrée. Crédit à toutes les réponses ci-dessus pour ceci:

$(document).on("keydown", function (e) {
    if (e.which === 8 && !$(e.target).is("input[type='text']:not([readonly]), textarea")) {
        e.preventDefault();
    }
});
1
répondu KingOfHypocrites 2013-10-16 03:31:33

j'ai tryed beaucoup des morceaux de code sur internet sans résultat satisfaisant. Les nouvelles versions de navigateur de IE (IE11) et Crome cassé mon ancienne solution, mais voici ce qui fonctionne pour moi avec IE11 + Crome + Firefox. Le code empêche le retour en arrière et l'utilisateur ne perd rien de ce qu'il a saisi dans un champ de texte:

window.addEventListener('keydown', function (e) {
    if (e.keyIdentifier === 'U+0008' || e.keyIdentifier === 'Backspace' || e.keyCode === '8' || document.activeElement !== 'text') {
        if (e.target === document.body) {
            e.preventDefault();
        }
    }
}, true);
0
répondu LarsOlsen 2014-10-07 16:37:12

pour Internet Explorer, cela a fonctionné pour moi:

de la fenêtre.la méthode addEventListener('bas', function (e) {

    if (e.keyCode === 8) {
        if (e.target === document.body) {
        e.preventDefault();
        }
    }
}, true);
0
répondu Gurpreet Singh 2015-01-20 13:28:58

Gérée readonly zones de texte aussi

$(document).keydown(function (e) {
        var activeInput = $(document.activeElement).is("input[type=text]:not([readonly]):focus, textarea:focus");
        if (e.keyCode === 8 && !activeInput) {
            return false;
        };
    });
0
répondu Vijai 2016-07-20 22:05:36