Comment désactiver un type d'entrée = texte?


123

Je souhaite désactiver l'écriture dans un champ de saisie de type à l' textaide de JavaScript, si possible. Le champ d'entrée est rempli à partir d'une base de données; c'est pourquoi je ne veux pas que l'utilisateur modifie sa valeur.

Réponses:


172

Si vous savez cela lorsque la page est rendue, ce qui semble être le cas car la base de données a une valeur, il est préférable de la désactiver lors du rendu au lieu de JavaScript. Pour ce faire, ajoutez simplement l' readonlyattribut (ou disabled, si vous souhaitez également le supprimer de la soumission du formulaire) <input>, comme ceci:

<input type="text" disabled="disabled" />
//or...
<input type="text" readonly="readonly" />

81
Je ne sais pas pourquoi cela obtient des votes, cela ne répond pas à la question. Nous nous attendions à des réponses javascript.
Sophie

3
@Sophie est le moyen le plus correct pour le demandeur de le faire en fonction de sa situation, peut-être qu'un changement de titre est en ordre.
Nick Craver

6
Le mode désactivé empêche les événements de clic sur la zone de saisie, mais pas en lecture seule. fyi.
knutole

Pour que le champ de saisie "lecture seule" ressemble au champ "désactivé", définissez 'style = "color: gray; background-color: # F0F0F0;"'. (C'était un commentaire à cette réponse )
Jake Toronto

2
Gardez à l'esprit que les navigateurs sont libres d'ignorer l'attribut "désactivé" ou "lecture seule" et que cette méthode ne doit pas être invoquée pour empêcher de manière fiable la mise à jour des données ... si le code côté serveur traitant le formulaire accepte toujours une valeur de ce champ et le mettre à jour, toute personne ayant suffisamment de connaissances pour créer son propre formulaire peut contourner cette "désactivation" ... ceci est pour la commodité de l'interface utilisateur uniquement dans un environnement de confiance. Le vrai moyen de l'empêcher est d'utiliser la logique côté serveur.
Aaron Wallentine

206
document.getElementById('foo').disabled = true;

ou

document.getElementById('foo').readOnly = true;

Notez que readOnlydevrait être dans camelCase pour fonctionner correctement dans Firefox (magie).

Démo: https://jsfiddle.net/L96svw3c/ - explique quelque peu la différence entre disabledet readOnly.


3
Cela a fonctionné pour moi. La version de Jquery est $ ('input'). Prop ('disabled', true)
Daniel Sun Yang

J'ai sept ans de retard sur ce point - mais y a-t-il une différence sémantique entre ces deux en 2017?
Jules

2
Vous n'êtes pas du tout en retard, la magie est toujours là (: je ne me souviens pas sur quelles plates-formes j'ai testé à l'époque, mais aujourd'hui readonly(en minuscules) ne fonctionne toujours pas dans Firefox 52 sur Ubuntu - devrait être le cas du camel.
hudolejev

Pourquoi ça ne marche pas pour moi? J'ai créé un inputélément avec id="gate"et j'essaye votre code, qui ne semble pas fonctionner pour moi ...
Voldemort's Wrath

21

Si les données sont remplies à partir de la base de données, vous pouvez envisager de ne pas utiliser de <input>balise pour les afficher. Néanmoins, vous pouvez le désactiver directement dans le tag:

<input type='text' value='${magic.database.value}' disabled>

Si vous devez le désactiver ultérieurement avec Javascript, vous pouvez définir l'attribut "désactivé":

document.getElementById('theInput').disabled = true;

La raison pour laquelle je suggère de ne pas afficher la valeur en tant que <input>est que, d'après mon expérience, cela provoque des problèmes de mise en page. Si le texte est long, <input>l'utilisateur devra essayer de faire défiler le texte, ce qui n'est pas quelque chose que les gens normaux devineraient faire. Si vous le déposez simplement dans un <span>ou quelque chose, vous avez plus de flexibilité de style.


3
Gardez à l'esprit que la désactivation peut rendre le texte presque illisible sur certains navigateurs. Vous pourriez être mieux avec l'attribut readonly, par exemple <input type = "text" value = "foo" readonly>
Olly Hodgson

7

Vous pouvez également par jquery:

$('#foo')[0].disabled = true;

Exemple de travail:

$('#foo')[0].disabled = true;
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<input id="foo" placeholder="placeholder" value="value" />


1
@Chani Poz Vous appelez le setter js natif sur l'objet jquery, cela entraînera une erreur. $ ('# foo') [0] .disabled = true ou $ ('# foo'). get (0) .disabled = true fera le travail
Arek Kostrzeba

6

Obtenez une référence à votre zone de saisie comme vous le souhaitez (par exemple document.getElementById('mytextbox')) et définissez sa readonlypropriété sur true:

myInputBox.readonly = true;

Vous pouvez également simplement ajouter cette propriété en ligne (aucun JavaScript n'est nécessaire):

<input type="text" value="from db" readonly="readonly" />

Si vous écrivez du HTML (par opposition au XHTML) qui serait <input type = "text" value = "from db" readonly>
Olly Hodgson
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.