“Miscellanées”

movable type

Movable Type [2.6.x] : formulaires en XHTML 1.0 strict

[MT version 2.6.x]

Après avoir réglé le problème du cookie lorsque vos archives individuelles sont disséminées dans votre site, il reste encore un souci avec le formulaire de commentaires pour les puristes qui souhaitent des pages valides en XHTML strict.

Le gabarit par défaut de l’archive individuelle de Movable Type (en XHTML 1.0 transitionnel) comporte la ligne suivante :

<form method="post" action="<$MTCGIPath$><$MTCommentScript$>" name="comments_form" onsubmit="if (this.bakecookie[0].checked) rememberMe(this)">

Mais, en XHTML 1.0 strict, le validateur est formel : This page is not Valid XHTML 1.0 Strict! Line xxx, column xx: there is no attribute “name”.

En XHTML 1.0 strict, l’attribut “name” comme identifiant d’un “form” n’est pas autorisé. La première réaction est de changer name="comments_form" par id="comments_form", mais, dans ce cas, le javascript qui réalise l’affichage du contenu du cookie dans les champs du formulaire ne fonctionne plus (sauf, exception étrange, dans Safari). Pire encore, les utilisateurs de IE6 Windows auront un message d’erreur à l’affichage de toutes vos pages :
“Erreur: document.comments_form.email a la valeur Null ou n’est pas un objet”.

J’ai trouvé la solution à cet embarras chez Chad Everett : Forms in XHTML 1.1.

Première étape. Changer sur le tag form l’attribut name pour id, ce qui donne :

<form method="post" action="<$MTCGIPath$><$MTCommentScript$>" id="comments_form" onsubmit="if (this.bakecookie[0].checked) rememberMe(this)">

Seconde étape. Remplacer le script :

<script type="text/javascript">
<!--
document.comments_form.email.value = getCookie("mtcmtmail");
document.comments_form.author.value = getCookie("mtcmtauth");
document.comments_form.url.value = getCookie("mtcmthome");
if (getCookie("mtcmtauth")) {
document.comments_form.bakecookie[0].checked = true;
} else {
document.comments_form.bakecookie[1].checked = true;
}
//-->
</script>

par :

<script type="text/javascript">
<!--
document.getElementById(’email’).value = getCookie("mtcmtmail");
document.getElementById(’author’).value = getCookie("mtcmtauth");
document.getElementById(’url’).value = getCookie("mtcmthome");
if (getCookie("mtcmtauth")) {
document.getElementById(’bakecookie’).checked = true;
} else {
document.getElementById(’forget’).checked = true;
}
//-->
</script>

Voilà, plus d’excuse pour ne pas passer au XHTML 1.0 strict.

1. Le 18 décembre 2003,
LaurentJ

A propos de formulaire, deux nouveaux articles sur openweb ;-)

http://openweb.eu.org/articles/formulaireaccessible/ http://openweb.eu.org/articles/validationformulaire/

2. Le 18 décembre 2003,
aqb

1) Merci pour tous tes trucs, je me suis permis d’utiliser ta méthode pour indiquer la date de dernière modification du billet. 2) “Mon” problème de coockie a disparu avec la validation!!! Que du bonheur ;)

3. Le 23 décembre 2003,
fastclemmy

C’est marrant, ce billet coïncide presque avec celui-là : http://www.hicksdesign.co.uk/journal/archives/000302.php

4. Le 23 décembre 2003,
Laurent

Agréable coïncidence (les grands esprits se rejoignent…). La solution proposée par Jon Hicks est un peu différente au niveau du javascript, mais le principe est le même.

Blah ?