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

DTD et javascript incompatible?

9 réponses
Avatar
elia
Bonjour,

J'ai un code en javascript qui ne foncionne pas si j'utilise une DTD.
Pourtant je ne peux me passer de la DTD, car ma mise en page en
d=E9pend! Comment concilier les deux?

La DTD que j'utilise est :

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

Le code javascript que j'utilise est celui pour ch=E9quer en fait si
l'utilisateur a rempli son formulaire. Il fonctionne bien si je ne met
pas la DTD? Oui, comment concilier les deux??

Il se pr=E9sente comme cela:

<script language=3D"JavaScript" type=3D"text/JavaScript">
function checkParameters() {
var errorString =3D""

if (document.all("Nom").value=3D=3D"")
errorString =3D errorString + "Veuillez entrer votre nom\n"
if (document.all("Prenom").value=3D=3D"")
errorString =3D errorString + "Veuillez entrer votre pr=E9nom\n"

if (errorString=3D=3D"") {
return true
} else {
alert(errorString)
return false;
}
}
</script>

et dans le form: ... onsubmit=3D'return checkParameters()' ...

Merci, pascal

9 réponses

Avatar
Olivier Miakinen
Bonjour,


J'ai un code en javascript qui ne foncionne pas si j'utilise une DTD.
Pourtant je ne peux me passer de la DTD, car ma mise en page en
dépend! Comment concilier les deux?

La DTD que j'utilise est :

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">


Quel type MIME utilises-tu pour servir la page ? application/xml+xhtml ?
Si oui, il est possible que le navigateur soit plus respectueux des
standards dans ce cas. Si non, un doctype HTML serait peut-être
préférable (je dis bien « peut-être »). Note que si tu cherches à
faire du code propre un « HTML 4.01 Strict » est plus proche du but
qu'un « XHTML 1.0 Transitional ».

Le code javascript que j'utilise est celui pour chéquer en fait si
l'utilisateur a rempli son formulaire. Il fonctionne bien si je ne met
pas la DTD? Oui, comment concilier les deux??

Il se présente comme cela:

<script language="JavaScript" type="text/JavaScript">


1) L'attribut language est déconseillé.
2) Je ne sais pas si les majuscules sont autorisées dans le nom
de type "text/javascript"

function checkParameters() {
var errorString =""

if (document.all("Nom").value=="")


C'est toi qui as défini la fonction document.all() ? Je pose la question
parce qu'il existe un objet document.all dans le JScript d'Internet
Explorer mais que ça ne fait pas partie de JavaScript -- et d'ailleurs
je ne pense pas que ce soit une fonction.

errorString = errorString + "Veuillez entrer votre nomn"
if (document.all("Prenom").value=="")


Même remarque.

errorString = errorString + "Veuillez entrer votre prénomn"

if (errorString=="") {
return true
} else {
alert(errorString)
return false;
}
}
</script>

et dans le form: ... onsubmit='return checkParameters()' ...


Si mes premières réponses ne te suffisaient pas à résoudre ton problème,
alors donne-nous une url vers la page où tu le constates.

Cordialement,
--
Olivier Miakinen

Avatar
elia
Merci, rapide la réponse!

J'utilise le mime

<html xmlns="http://www.w3.org/1999/xhtml">
avec en entête
<meta http-equiv="Content-Type" content="text/html;
charset=iso-8859-1" />
<LINK href="style_vac.css" rel="stylesheet" type="text/css"
media="screen">

le lien est : http://www.vie-art-cite.ch/cartes_formulaire.php

Merci, pascal
Avatar
SAM
Bonjour,


Salut,
d'où sors-tu ce post ?
(dont je crois avoir vu des traces qque part ailleurs)

J'ai un code en javascript qui ne foncionne pas si j'utilise une DTD.
Pourtant je ne peux me passer de la DTD, car ma mise en page en
dépend! Comment concilier les deux?

La DTD que j'utilise est :

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
(snip)


<script language="JavaScript" type="text/JavaScript">


1) L'attribut language est déconseillé.
2) Je ne sais pas si les majuscules sont autorisées dans le nom
de type "text/javascript"

function checkParameters() {
var errorString =""

if (document.all("Nom").value=="")


C'est toi qui as défini la fonction document.all() ?


J'ai comme l'impression que ça aurait dû être :

if (document.all["Nom"].value=="")

et qu'IE en non mode soupe de tags n'apprécie pas ces errements.

if (document.all("Prenom").value=="")


Même remarque.


toutafé [ ] au lieu de ( )

--
sm


Avatar
SAM

le lien est : http://www.vie-art-cite.ch/cartes_formulaire.php


Bon ... he ben ... y a pas que le JavaScript qui n'est pas au top ...
(uniquement IE compatible)

Le PHP a gobé l'envoi du formulaire quasi vide.

--
sm

Avatar
Olivier Miakinen

J'utilise le mime

<html xmlns="http://www.w3.org/1999/xhtml">
avec en entête
<meta http-equiv="Content-Type" content="text/html;
charset=iso-8859-1" />
<LINK href="style_vac.css" rel="stylesheet" type="text/css"
media="screen">


Ma question concernait plutôt les entêtes HTTP, qui prennent le pas sur
l'élément meta.

le lien est : http://www.vie-art-cite.ch/cartes_formulaire.php


La réponse à ma question est donc :
Content-Type: text/html

Comme je le supposais ce n'est pas du tout du XHTML, et donc pas du
XML. Au passage je redirige donc vers fr.comp.lang.javascript seul
(je devrais même logiquement le faire vers fciw.auteurs).

Au fait, heureusement que tu ne l'envoies pas avec un type MIME
application/xml+xhtml car tu n'aurais carrément rien d'affiché
quel que soit le navigateur. Par exemple tu as une balise LINK
en majuscules et l'élément n'est pas fermé. C'est cela qui donne
les sept premières erreurs de validation :
http://validator.w3.org/check?verbose=1&uri=http%3A%2F%2Fwww.vie-art-cite.ch%2Fcartes_formulaire.php

Donc un DOCTYPE oui, mais sûrement pas XHTML 1.0.

Essaye avec :
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">

Puis repasse la validation et corrige les erreurs HTML et le JavaScript.

Avatar
elia
Ouaips, merci pour les infos mais le problème reste le même.

Soit je ne mets pas de doctype et mon javascript fonctionne soit le
contraire.

J'ai essayé avec le DOCTYPE:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">

...mais c'est la même chose!

Quand au javascript j'ai aussi essayé avec ce script :

<script type="text/javascript">
function verif_champs () {
var errorString =""
if (document.all("Nom").value=="")
errorString = errorString + "Veuillez entrer votre nomn"

if (document.all("Prenom").value=="")
errorString = errorString + "Veuillez entrer votre prénomn"

if (errorString=="") {
return true
} else {
alert(errorString)
return false;
}
}
</script>

..qui fonctionne également sans le doctype??

Question: Est-ce qu'un autre script javascript (qui contrôle qu'un
champs sont rempli) fonctionne avec ce DOCTYPE?

Merci, pascal
Avatar
Olivier Miakinen
Ouaips, merci pour les infos mais le problème reste le même.


Ah.

Soit je ne mets pas de doctype et mon javascript fonctionne soit le
contraire.


Ah bon. Seulement mettre un doctype HTML n'est que la première étape,
censée faciliter les suivantes : corriger les erreurs HTML d'abord, puis
les erreurs JavaScript.

<script type="text/javascript">


Ça c'est mieux en effet.

if (document.all("Nom").value=="")


Puisque tu ne définis visiblement aucune fonction all(), tu devrais au
moins suivre le conseil de SAM et remplacer les parenthèses par des
crochets. Je le cite :

<cit.>
J'ai comme l'impression que ça aurait dû être :
if (document.all["Nom"].value=="")
et qu'IE en non mode soupe de tags n'apprécie pas ces errements.
</cit.>

Cela dit, abandonner le « all » qui ne fonctionnera que dans quelques
navigateurs et utiliser « getElementById() » qui est normalisé serait
quand même préférable.

Question: Est-ce qu'un autre script javascript (qui contrôle qu'un
champs sont rempli) fonctionne avec ce DOCTYPE?


Oui, bien sûr. Si tu cherches des scripts tout faits, privilégie
ceux qui utilisent getElementById et rejette impitoyablement ceux
qui utilisent des document.all ou des document.layer (ou layers,
je ne sais plus).

Avatar
SAM
Ouaips, merci pour les infos mais le problème reste le même.

Soit je ne mets pas de doctype et mon javascript fonctionne soit le
contraire.


On s'en moque de toutes façons, au mieux, ce ne sera que pour IE

Question: Est-ce qu'un autre script javascript (qui contrôle qu'un
champs sont rempli) fonctionne avec ce DOCTYPE?


bien entendu, et peu importe le doctype (sauf peut-être le xml ?),
ne serait-ce qu'avec le JS de nos grand' mères ...

<script type="text/javascript">
function verif_champs (monForm) {
var f = monForm.elements;
var messg = 'Vous navez pas rempli le champ : ';
for (var i=0, L=f.length; i<L; i++) {
if(f[i].type=='text' && f[i].value.length<1) {
alert(messg + f[i].name);
f[i].focus();
f[i].select();
return false;
}
}
return true;
}
</script>

<form onsubmit="return verif_champs(this);" ... blabla >
<p>Nom : <input name="Nom" type="text">
<p>Prénom : <input name="Prenom" type="text">
<p><input type="submit">
</form>

Avatar
elia
Oui, ok, pour les crochets, j'avais pris compte aussi de cette
judicieuse remarque mais en copiant un autre script qui fonctionnait
dans un autre formulaire, les parenthèses y étaient restées!

Je vais suivre plus scrupuleusement les remarques et je vous remercie
beaucoup pour les conseils. Pour ceux que cela intéressent je
reporterai ici mes "expériences"!

Merci encore, Pascal