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>
> <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
> 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/>
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...
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>
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
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
Excellente idï¿œe ! Puisque JavaScript est un prï¿œrequis, cette solution me
semble parfaitement convenir.
--
Olivier Miakinen
C'est bien une solution � base de champ hidden qui a �t� mise en place.
Dommage que �a ne soit pas plus simple :/