101 votes

Comment empêcher l'utilisateur de taper dans un champ de texte sans désactiver le champ?

J'ai essayé :

$('input').keyup(function() {

   $(this).attr('val', '');

});

mais cela supprime le texte saisi peu de temps après qu'une lettre soit saisie. Y a-t-il un moyen d'empêcher complètement l'utilisateur de saisir du texte sans avoir recours à la désactivation du champ de texte ?

1 votes

Est-ce que keydown() ou keypress() est plus efficace?

221voto

esker Points 6266

Une alternative non-Javascript qui peut facilement passer inaperçue : pouvez-vous utiliser l'attribut readonly au lieu de l'attribut disabled ? Cela empêche l'édition du texte dans l'input, mais les navigateurs stylisent l'input différemment (moins susceptible de le "griser") par exemple

3 votes

L'attribut readonly n'a pas de valeur, il doit simplement être présent à la fois dans HTML 4.01 et dans HTML5. La seule fois où il a besoin d'une valeur est dans les documents XHTML valides (qui sont extrêmement rares sur le web).

0 votes

C'est exactement correct RobG, j'aurais dû le mentionner. Je tiens également à mentionner que cet attribut devrait fonctionner pour les éléments textarea, et je pense qu'il fonctionne également pour les cases à cocher/boutons radio.

4 votes

Il y a un inconvénient à cette méthode. L'utilisateur peut toujours cliquer dans le champ, ce qui donne l'impression qu'il est modifiable. S'ils appuient sur la touche de retour arrière pour effacer ce qui est dedans, cela peut déclencher la fonctionnalité "retour" du navigateur. Ce n'est pas une bonne expérience.

73voto

Art Points 163

Si vous ne voulez pas que le champ semble "désactivé" ou quelque chose, utilisez simplement ceci :

onkeydown="return false;"

c'est essentiellement la même chose que ce que greengit et Derek ont dit mais un peu plus court

0 votes

J'ai dû e.preventDefault(); dans addEventListener.

3 votes

Encore plus court: onkeydown="return false"

4 votes

Soyez simplement conscient que cela n'empêche pas l'utilisateur de coller du texte avec la souris.

36voto

good_computer Points 3368
$('input').keydown(function(e) {
   e.preventDefault();
   return false;
});

2 votes

En réalité, j'ai un champ de date de naissance et je veux empêcher l'utilisateur de saisir, donc pour moi votre réponse est BONNE !! Si j'utilise l'attribut "readonly", l'utilisateur ne pourra pas cliquer sur l'entrée et la fenêtre contextuelle de la date de naissance s'ouvrira en cliquant sur l'entrée.. :) CHEERS!!!! et Merci

0 votes

@treecoder: Bon exemple. Mais que se passe-t-il si je veux inclure une vérification conditionnelle avant d'empêcher une entrée? Par exemple, je veux empêcher l'entrée de tous les caractères de "a" à "z", en minuscules et en majuscules, ainsi que le symbole "@". Tous les autres symboles et chiffres devraient être autorisés. Comment faire cela en utilisant spécifiquement la fonction jQuery que vous avez écrite ci-dessus?

20voto

Derek Hunziker Points 6663
$('input').keypress(function(e) {
    e.preventDefault();
});

2 votes

Cela ne fera que empêcher la saisie, alors que vous pouvez toujours utiliser les touches fléchées et ainsi de suite. Merci!

12voto

WEB_UI Points 362

Si vous voulez empêcher l'utilisateur d'ajouter quoi que ce soit, mais lui donner la possibilité d'effacer des caractères :

Le fait de définir l'attribut maxlength d'un champ de saisie à "0" fait en sorte que l'utilisateur ne puisse pas ajouter de contenu, mais peut toujours effacer le contenu à sa guise.


Mais si vous voulez qu'il soit vraiment constant et immuable :

En définissant l'attribut onkeydown à return false, l'input ignore les keypresses de l'utilisateur, les empêchant ainsi de modifier ou d'affecter la valeur.

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