71 votes

Quelle est la différence entre readonly="true" et readonly="readonly" ?

Quelle est la différence entre :

<input name="TextBox1" type="text" id="TextBox1" readonly="true" />

et :

<input name="TextBox1" type="text" id="TextBox1" readonly="readonly" />

Lorsque i fixe readonly a true son fonctionnement est quelque peu différent de celui du readonly='readonly' . La norme W3C stipule que readonly devrait être 'readonly' & non 'true' . Pourquoi la plupart des navigateurs permettent-ils readonly='true' qui a une fonctionnalité quelque peu différente de celle de readonly='readonly' ?

0 votes

Quel balisage DOCTYPE, DTD, et quel mode de navigation ?

3 votes

Une réponse plus globale à votre question spécifique est que les navigateurs sont conçus pour être compatibles avec toutes sortes de codages peu rigoureux (et parfois terribles). Trouver le codage le plus strict qui fonctionnera avec tous les navigateurs est une vertu, parce que les kludges ne fonctionneront que jusqu'à ce que les développeurs de navigateurs en aient marre :)

0 votes

70voto

jerone Points 3027

Attribuer à un élément l'attribut readonly confère à cet élément le statut de lecture seule. Peu importe la valeur que vous mettez après ou si vous mettez n'importe quelle valeur après, l'élément sera toujours considéré comme étant en lecture seule. Mise en place readonly="false" ne fonctionnera pas.

Il est suggéré d'utiliser la norme W3C, qui est readonly="readonly" .

15 votes

Mise en place readonly="false" ne fonctionnera pas, en ce sens qu'elle ne fera pas ce qui est attendu d'elle. Il "fonctionnera" (aura un effet) dans le sens où il rendra l'élément en lecture seule (dans les navigateurs actuels, même s'il est invalide selon la spécification).

0 votes

Au cas où ce ne serait pas clair, pour le remettre en lecture/écriture, il faut supprimer le paramètre readonly complètement

59voto

Robert Koritnik Points 45499

Il s'agit d'un paramètre de propriété plutôt que d'un attribut valorisé

Ces paramètres de propriété sont des valeurs en soi et n'ont pas besoin d'être affectées. Lorsqu'ils sont présents, un élément a cette propriété booléenne fixée à true lorsqu'ils sont absents, ils sont false .

<input type="text" readonly />

Ce sont en fait les navigateurs qui sont libéraux en ce qui concerne la valeur qui leur est attribuée. Si vous leur attribuez une valeur quelconque, elle sera tout simplement ignorée. Les navigateurs ne verront que la présence d'une propriété particulière et ignoreront la valeur que vous essayez de lui attribuer.

C'est bien sûr une bonne chose, car certains frameworks n'ont pas la possibilité d'ajouter de telles propriétés sans fournir leur valeur en même temps. Les aides Html d'Asp.net MVC en font partie. jQuery était dans la même situation jusqu'à la version 1.6 où ils ont ajouté le concept de propriétés.

Il y a bien sûr certaines implications liées au XHTML, car les attributs du XML ont besoin de valeurs pour être bien formés. Mais il s'agit là d'une autre histoire. Les navigateurs doivent donc ignorer les attributions de valeurs.

Quoi qu'il en soit. Peu importe la valeur que vous leur attribuez à condition que le nom soit correctement orthographié pour qu'il soit détecté par les navigateurs. Mais pour des raisons de lisibilité et de maintenabilité, il est préférable de leur attribuer des valeurs significatives, comme par exemple :

readonly="true" <-- arguably best human readable
readonly="readonly"

par opposition à

readonly="johndoe"
readonly="01/01/2000"

ce qui risque d'embrouiller les futurs développeurs chargés de la maintenance de votre code et d'interférer avec les futures spécifications qui pourraient définir des règles plus strictes pour ces paramètres de propriété.

39voto

Ciro Santilli Points 3341

readonly="true" es HTML5 non valide , readonly="readonly" est valide.

Spécification HTML5 :

http://www.w3.org/TR/html5/forms.html#attr-input-readonly :

L'attribut readonly est un attribut booléen

http://www.w3.org/TR/html5/infrastructure.html#boolean-attributes :

La présence d'un attribut booléen sur un élément représente la valeur vraie, et l'absence de l'attribut représente la valeur fausse.

Si l'attribut est présent, sa valeur doit être soit la chaîne vide, soit une valeur qui correspond au nom canonique de l'attribut sans tenir compte de la casse ASCII, sans espace blanc à l'initiale ou à la fin.

Conclusion :

Il s'agit des éléments suivants valables, équivalentes et vraies :

<input type="text" readonly />
<input type="text" readonly="" />
<input type="text" readonly="readonly" />
<input type="text" readonly="ReAdOnLy" />

Il s'agit des éléments suivants invalide :

<input type="text" readonly="0" />
<input type="text" readonly="1" />
<input type="text" readonly="false" />
<input type="text" readonly="true" />

L'absence de l'attribut est la seule syntaxe valable pour l'expression faux :

<input type="text"/>

Recommandation

Si vous vous souciez d'écrire du XHTML valide, utilisez readonly="readonly" puisque <input readonly> est invalide et les autres alternatives sont moins lisibles. Sinon, il suffit d'utiliser <input readonly> car il est plus court.

20voto

KooiInc Points 38845

readonly="readonly" es xhtml syntaxe. En xhtml, les attributs booléens sont écrits de cette manière. En xhtml, la "minimisation des attributs" ( <input type="checkbox" checked> ) n'est pas autorisé, c'est donc la façon valide d'inclure des attributs booléens dans xhtml. Voir cette page pour plus d'informations.

Si votre type de document est xhtml transitionnel ou strict et que vous voulez le valider, utilisez readonly="readonly autrement readonly est suffisante.

2voto

Phil Points 48960

Je ne vois pas en quoi ils sont fonctionnellement différents. Mon lot actuel de navigateurs OS X ne montre aucune différence.

Je suppose qu'ils sont tous fonctionnellement identiques en raison de la gestion des attributs HTML. À l'époque, tout attribut booléen n'avait besoin que d'être présent, sans valeur, par exemple

<input readonly>
<option selected>

Lorsque le XHTML est apparu, cette syntaxe n'était plus valide et des valeurs étaient nécessaires. Bien que le W3 ait spécifié l'utilisation du nom de l'attribut comme valeur, je suppose que la plupart des éditeurs de navigateurs ont décidé de vérifier simplement l'existence de l'attribut.

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