Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Prise en compte attribut readonly

12 réponses
Avatar
Pierre Goiffon
Bonjour,

Je suis très surpris, je n'arrive pas à faire fonctionner l'attribut
readonly que je suis pourtant quasi certain d'avoir vu fonctionner fut
un temps sur des champs input text.

Ainsi, sur la page suivante sur IE7 comme sur Fx 3.6 je peux modifier le
champ texte et cocher radio et checkbox ! Qu'est-ce que je rate donc de
si évident ??!?


<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"
"http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<title>Test readonly</title>
</head>
<body>

<form action="">
<p>
<input type="text" value="ui" name="titi"><br>
<input type="checkbox" readonly name="toto"><br>
<input type="radio" readonly name="tutu">
</p>
</form>

</body>
</html>

10 réponses

1 2
Avatar
Olivier Masson
Le 05/02/2010 16:53, Pierre Goiffon a écrit :

<input type="text" value="ui" name="titi"><br>
<input type="checkbox" readonly name="toto"><br>
<input type="radio" readonly name="tutu">




Sans avoir testé : en strict as-tu le droit de laissé un attribut sans
valeur ? (je sais plus si c'est html strict ou xhtml qui l'impose et
j'ai pas le tps de chercher)
Dans tous les cas, écrire readonly="readonly" ne fera pas de mal.
Avatar
Pierre Goiffon
On 05/02/2010 17:01, Olivier Masson wrote:
<input type="text" value="ui" name="titi"><br>
<input type="checkbox" readonly name="toto"><br>
<input type="radio" readonly name="tutu">



Sans avoir testé : en strict as-tu le droit de laissé un attribut sans
valeur ? (je sais plus si c'est html strict ou xhtml qui l'impose et
j'ai pas le tps de chercher)
Dans tous les cas, écrire readonly="readonly" ne fera pas de mal.



J'ai essayé en HTML 4 strict et transitionnal, pas de différence.

Pour la valeur d'attribut, c'est une contrainte XHTML :
http://www.w3.org/TR/xhtml1/diffs.html#h-4.5
Cela dis je viens de découvrir une règle de compatibilité que je ne suis
pas sûr de comprendre :
http://www.w3.org/TR/xhtml1/#C_10

Et la ref readonly HTML :
http://www.w3.org/TR/html4/interact/forms.html#adef-readonly
Avatar
Paul Gaborit
À (at) Fri, 05 Feb 2010 16:53:47 +0100,
Pierre Goiffon écrivait (wrote):

Je suis très surpris, je n'arrive pas à faire fonctionner l'attribut
readonly que je suis pourtant quasi certain d'avoir vu fonctionner fut
un temps sur des champs input text.




Petit extrait de
<http://www.w3.org/TR/html4/interact/forms.html#edef-INPUT> :

readonly (readonly) #IMPLIED -- for text and passwd --

--
Paul Gaborit - <http://perso.mines-albi.fr/~gaborit/>
Avatar
Pierre Goiffon
On 05/02/2010 17:51, Paul Gaborit wrote:
Je suis très surpris, je n'arrive pas à faire fonctionner l'attribut
readonly que je suis pourtant quasi certain d'avoir vu fonctionner fut
un temps sur des champs input text.



Petit extrait de
<http://www.w3.org/TR/html4/interact/forms.html#edef-INPUT> :

readonly (readonly) #IMPLIED -- for text and passwd --



Ok, et bien vu !
Cela explique le non fonctionnement sur radio et checkbox. Mais dans ma
page exemple, ça ne fonctionne pas non plus sur le text...
Avatar
Pierre Goiffon
On 05/02/2010 18:09, Pierre Goiffon wrote:
<http://www.w3.org/TR/html4/interact/forms.html#edef-INPUT> :

readonly (readonly) #IMPLIED -- for text and passwd --



Cela explique le non fonctionnement sur radio et checkbox. Mais dans ma
page exemple, ça ne fonctionne pas non plus sur le text...



Hahum !
J'avais oublié le readonly sur le input text :D

Avec le code suivant pas de soucis pour le texte, par contre ça ne
fonctionne pas sur checkbox et radio.


<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"
"http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<title>Test readonly</title>
</head>
<body>

<form action="">
<p>
<input type="text" value="ui" name="titi" readonly><br>
<input type="checkbox" readonly name="toto"><br>
<input type="radio" readonly name="tutu">
</p>
</form>

</body>
</html>
Avatar
Yop
Essaye DISABLED
Avatar
SAM
Le 2/5/10 7:06 PM, Yop a écrit :
Essaye DISABLED




Ha ! voilà le terme que je cherchais un peu en vain !
M'semblait bien que ce n'était pas tout à fait "readonly"
(comme si on pouvait *lire* un bouton ... !? )

Pierre, avec son problème, m'avait un peu destabilisé là ;-)

Des fois où on peut tourner en rond autour de qque chose trop simple !
--
sm
Avatar
Pierre Goiffon
On 05/02/2010 23:05, SAM wrote:
Essaye DISABLED



Ha ! voilà le terme que je cherchais un peu en vain !



C'est pour ne pas utiliser disabled que je cherchais autre chose :)

Les input disabled ne sont pas envoyés en submit, et dans mon cas
c'était fort problématique (des input à passer en readonly de manière
dynamique en JS, car suivant la valeur d'une autre option dans la page
ils doivent pouvoir être modifiés ou pas, et donc le framework côté
serveur a du mal s'il ne reçoit que certaines fois les valeurs des
input, suivant qu'ils ont été placés en disabled ou non)
Avatar
Olivier Miakinen
Le 09/02/2010 15:59, Pierre Goiffon a écrit :

C'est pour ne pas utiliser disabled que je cherchais autre chose :)

Les input disabled ne sont pas envoyés en submit, et dans mon cas
c'était fort problématique (des input à passer en readonly de manière
dynamique en JS, car suivant la valeur d'une autre option dans la page
ils doivent pouvoir être modifiés ou pas, et donc le framework côté
serveur a du mal s'il ne reçoit que certaines fois les valeurs des
input, suivant qu'ils ont été placés en disabled ou non)



Il y a toujours une solution, mais de plus en plus usineàgazesque :
quand tu veux passer un input non texte en readonly, ton script JS le
passe en disabled et rajoute un input hidden de même nom et de même
valeur ; quand tu veux le repasser en read-write, le script retire le
disabled en même temps qu'il supprime l'input hidden.

Bon courage !
Avatar
SAM
Le 2/9/10 4:20 PM, Olivier Miakinen a écrit :
Le 09/02/2010 15:59, Pierre Goiffon a écrit :
C'est pour ne pas utiliser disabled que je cherchais autre chose :)

Les input disabled ne sont pas envoyés en submit, et dans mon cas
c'était fort problématique (des input à passer en readonly de manière
dynamique en JS, car suivant la valeur d'une autre option dans la page
ils doivent pouvoir être modifiés ou pas, et donc le framework côté
serveur a du mal s'il ne reçoit que certaines fois les valeurs des
input, suivant qu'ils ont été placés en disabled ou non)



Il y a toujours une solution, mais de plus en plus usineàgazesque :
quand tu veux passer un input non texte en readonly, ton script JS le
passe en disabled et rajoute un input hidden de même nom et de même
valeur ; quand tu veux le repasser en read-write, le script retire le
disabled en même temps qu'il supprime l'input hidden.

Bon courage !



Ben ... pourquoi pas simplement un hidden attaché au bouton
et du bouton on en n'a plus que faire (le php ne veut que le hidden)

<fieldset><legend>Les trucs</legend>
voir/cacher les trucs: <input type="checkbox" onclick="valuate(this)">
<p><label for="truc1">
truc 1: <input type="checkbox" value="1" onclick="ok(this)" id="truc1">
<input type="hidden" name="truc1" value="0"></label>
<label for="truc2">
truc 2: <input type="checkbox" value="2" onclick="ok(this)" id="truc2">
<input type="hidden" name="truc2" value="0"></label>
<label for="truc3">
truc 3: <input type="checkbox" value="3" onclick="ok(this)" id="truc3">
<input type="hidden" name="truc3" value="0"></label></p>
</fieldset>

function ok(quoi) {
var v = quoi.checked, o = quoi.value;
while(quoi.tagName!='LABEL') quoi=quoi.parentNode;
quoi.getElementsByTagName('INPUT')[1].value = v? o : '0';
}
function valuate(quoi) {
var v = quoi.checked;
while(quoi.tagName!='FIELDSET') quoi=quoi.parentNode;
quoi = quoi.getElementsByTagName('INPUT');
for(var i=1, n=quoi.length; n>i; i++)
if(quoi[i].type=='checkbox') quoi[i].disabled= !v;
}

--
sm
1 2