Comment puis-je désactiver la touche de backstStroke si quelque chose à autre chose que 2 champs d'entrée spécifiques sont axés sur l'utilisation de jQuery?
Voici mon code actuel (maintenant 2 Textboxes): P>
$(document).keypress(function(e){ var elid = $(document.activeElement).attr('id'); if(e.keyCode === 8 && elid != 'textbox1' || elid != 'textbox2'){ return false; }; });
9 Réponses :
Je pense que cela ferait l'affaire: supposant que les boîtes de texte ont la classe "TextInput". p>
L'événement ne tire pas ici pour le retour arrière
Vous avez raison, le keypress code> ne tire pas sur l'espace de retour. IV'e mise à jour à
Keydown code> et maintenant ça marche. Merci pour la remarque
Génial, cela fonctionne. J'ai changé la vérification de la condition en $ (document.activeLement) .is ("entrée [type = text]") car je n'utilise pas une telle classe. Pourrait ajouter d'autres types si nécessaire.
À mon avis, la réponse de @ rybo111 est meilleure car elle n'a pas besoin d'appliquer une classe sur tout, car elle ne regarde pas: Focus mais ActiveLement (qui a déjà lieu), et parce qu'il comprend des intrants et des textaes . Stackoverflow.com/a/17278620/105539
Backspace ne s'inscrit pas comme un événement de clavier sur chrome, mais il fait sur Firefox
@Volomike dans la question originale L'astucieux voulait désactiver l'espace de retour dans chaque champ d'entrée sauf deux. C'est pourquoi ma réponse a besoin d'une classe spéciale, de lui permettre de choisir les entrées qui accepteront l'espace de retour.
@Nick cravraver, réponse honteuse pour quelques raisons. Répondez à la question ou au moins fréquenter pensivement.
Voici une solution basée sur les prototypes que j'ai fini par utiliser pour mes formulaires, car les utilisateurs se sont plaints que le backpace les retirait de la forme (qui est une chose tellement contre-intuitive à faire, une merveille Pourquoi tous les navigateurs utilisent la touche de backspace comme bouton arrière). P>
// event handlers must be attached after the DOM is completely loaded Event.observe(window, 'load', function() { // keypress won't fire for backspace so we observe 'keydown' Event.observe(window, 'keydown', function(event){ // 8 == backspace if( event.keyCode == 8) { // with no field focused, the target will be HTMLBodyElement if( event.target == document.body) { // stop this event from propagating further which prevents // the browser from doing the 'back' action event.stop(); } } }); });
A l'air génial, mais ne fonctionne pas sur chrome car il n'a pas d'événement. Je l'ai aussi collé à l'intérieur de $ (document) .Ready (fonction (fonction () {... bloquée ici ...} Parce que vous avez dit "doit être jointe après que le DOM soit complètement chargé".
@Volomike Désolé, j'aurais dû préciser que ceci est une solution basée sur le prototype JavaScript Framework ( prototypejs.org a>). C'est semblable à JQuery, juste pire.
Cela désactivera l'espace de retour sur votre site sans avoir à ajouter des classes spécifiques aux boîtes de saisie. Pour désactiver l'espace de retour, sauf lorsque vous utilisez des cases d'entrée, utilisez .is ("Entrée: Focus") FORT> Si vous souhaitez désactiver le backpace, sauf si vous utilisez des cases Textarea, utilisez .is ("Entrée: Focus, Textarea: Focus ") STRUT> $(document).keypress(function(e){
var elid = $(document.activeElement).is("input:focus");
if(e.keyCode === 8 && !elid){
return false;
};
});
L'entrée et la textarea devraient supporter l'espace de retour
Si c'est déjà l'élément actif, pourquoi vérifier l'événement de la mise au point aussi?
La réponse de Hudson-Peralta a fonctionné bien pour moi, mais j'ai fait une petite modification depuis que j'utilise de nombreux événements de clés:
Ne supporte pas textarea.
Je pense qu'une légère modification est nécessaire pour gérer textaes:
Moi aussi j'ai travaillé dur sur la même chose. Enfin, j'ai trouvé la réponse et pour la commodité de tout le monde, j'ai placé la solution sur http://blog.totusinfo.com/jquery-disable-backspace-for-document-history-except-inputts-and-textea/ P>
La solution de Hudson-Peralta + QF_Developer est géniale, mais elle a une faille:
Si votre mise au point est sur un bouton radio ou la case à cocher, le bouton Retour arrière vous jette toujours de la page. Voici une modification pour éviter cet écart: edit 20130204: strong> EDIT 20151208: strong>
keypress () code> remplacé par
clé () code>! de
Le code ci-dessus fonctionne maintenant correctement. P>
Comme mentionné dans le commentaire de @outofmind, il y a plus de types d'entrée qui pourraient vous remettre lorsque vous appuyez sur le dos. Veuillez ajouter à la liste sélecteur séparée des virgules de la méthode IS () Tout type de champs d'entrée permettant une entrée de caractères directs et qui sont vraiment utilisés dans votre code HTML, comme entrée [type = "mot de passe"]: Focus Code>,
entrée [TYPE = "Numéro"]: Focus code> ou
entrée [TYPE = "EMAIL"]: Focus P> P> P> P>
Vous êtes absolument correct, Thomas! J'ai corrigé ma réponse en conséquence. Dans un projet où j'utilise le code moi-même, j'utilise également la clé, mais pour rester en ligne avec la discussion ici, j'ai copié et modifié les blocs existants de cette discussion et introduisez l'erreur. Désolé.
Pourquoi se concentrer uniquement sur l'entrée [TYPE = "Texte"] uniquement et toutes les entrées ne sont-elles pas disponibles? Si c'est déjà l'élément actif, pourquoi ne recherchez que sur les éléments de la mise au point?
Vous devez également autoriser entrée [type = "numéro"]] code> et
entrée [type = "mot de passe"] code>
Entièrement d'accord, @outofmind. J'ai édité la réponse. Merci!
J'ai modifié la réponse un peu plus pour combiner la bonne réponse de chacun de
1. Sélecteur d'occasion "Entrée [TYPE = Texte]: Focus, Textarea: Focus" Pour maintenir le comportement par défaut pour ces éléments et, comme indiqué JPsy, d'empêcher le comportement par défaut sur les entrées telles que la case à cocher
2. Utilisé E.Target plutôt que pour rendre le code dépend plus exclusivement sur jQuery, car je ne suis pas sûr si chaque navigateur prend en charge le document.ActiveElement bien
3. Inclure le champ strong> Mot de passe strong> En ajoutant l'entrée
$(document).keydown(function(e){
var code=e.keyCode;
var is_to_stop= (!$(e.target).is("input[type=text]:focus, input[type=password]:focus, textarea:focus")) && (code==8);
if(is_to_stop){
return false;
}
});
J'ai fait une légère modification de la réponse acceptée, qui peut être utile à une personne: avec cette méthode, l'utilisateur peut toujours naviguer à l'aide d'un backpace en maintenant Ctrl, mais aussi prend en compte Bien sûr, l'alternative consiste à utiliser quelque chose comme textarea code> ainsi que toute entrée
code>. p>
Cela aurait dû être sélectionné comme meilleure réponse car c'est le plus complet. Merci pour cela - je l'ai utilisé avec succès avec QWebeview Widget dans une application QT / C ++.