JS : échapper des quotes

WRInaute discret
J'ai un bout de code à générer via un document.write("");
ça ressemble à :
Code:
<script type="text/javascript">
document.write("  <label for="truc">Ma ville <sup>*</sup></label>
  <input type="hidden" name="ville" id="ville" value="<?=$ville?>" />
  <input type="text" name="q" id="truc" value="<?=$ville?>"
         onkeypress="if(this.value.length > 1){maFonction()};"
         onfocus="this.className='formActiv'"
         onblur="this.className=''" />")
</script>

Mais, comment échapper les backslash ? Si je supprimes les quotes de document.write() ça fonctionne pour IE ou Gecko, mais d'autre navigateur n'aime pas (Opéra pou rne citer que lui en premier), ce qui est plutôt normal.

Quelqu'un à une solution miracle ?
 
WRInaute accro
Ca marche ça ?
Code:
<script type="text/javascript"> 
document.write("  <label for=\"truc\">Ma ville <sup>*</sup></label> 
  <input type=\"hidden\" name=\"ville\" id=\"ville\" value=\"<?=$ville?>\" /> 
  <input type=\"text\" name=\"q\" id=\"truc\" value=\"<?=$ville?>\" 
         onkeypress=\"if(this.value.length > 1){maFonction()};\" 
         onfocus=\"this.className='formActiv'\" 
         onblur=\"this.className=''\" />"); 
</script>
 
WRInaute discret
Et j'ajouterais qu'il est préférable d'"échapper" les '/' pour les fermetures de balises :

</a> devient <\/a> ; </div> devient <\/div> ; etc...

Ceci afin de suivre les recomandations W3C et donc, de ne pas avoir de messages d'erreurs lors du test de validation.
 
WRInaute discret
Source : SELFHTML

SELFHTML a dit:
Avec <script> vous introduisez un passage Script, avec </script> vous mettez fin au passage Script. Dans ce passage, vous pouvez noter des instructions du langage script utilisé. Du point de vue de HTML, tout ce qui figure dans ce passage est considéré comme du "pur texte". De ce fait, des conflits peuvent en fin de compte survenir entre un langage tel que JavaScript et un analyseur (syntaxique HTML) strictement conforme SGML. Un tel analyseur de syntaxe considère le passage script comme terminé dès qu'il rencontre la prochaine chaîne de caractères </. Quand vous avez besoin de cette chaîne de caractères dans JavaScript comme dans l'exemple ci-dessus dans la dernière instruction où à l'aide de document.write un titre N°1 est écrit dans le document. À la fin du texte est mentionné là <\/h1> à la place de </h1>. La barre oblique inverse (Backslash) sert en JavaScript à masquer le signe qui la suit, ce qui dans l'exemple à l'endroit où elle est placée et du point de vue de JavaScript ne signifie rien d'autre et n'a pas d'autre effet. La barre oblique inverse n'est pas non plus conçue pour l'interpréteur JavaScript mais pour les analyseurs syntaxiques HTML tatillons.
 
WRInaute discret
Malheureusement cela ne fonctionne pas, à cause, je pense des ' que j'ai via les onclick=" ' ' "

Merci à vous.
 
WRInaute discret
J'ai trouvé, Opéra n'aime pas du tout les retour de ligne dans document.write.
J'ai échappé tout les " et / mais rien pour les '.
 
WRInaute accro
Tu veux dire qu'il faut écrire document.write("") sur une seule ligne de code, c'est cela ?
 
WRInaute discret
Pour Opéra oui...!

Par contre le validateur n'aime pas, et les navigateurs du coup non plus...
Ca ressemble à ça :
Code:
<script type="application/javascript">
document.write("<p><label for=\"myId\">Ma ville <sup>*<\/sup><\/label><input type=\"text\" name=\"q\" id=\"myId\" value=\"<?=$ville?>\" onkeypress=\"if(this.value.length > 1){myFunction()};\" onfocus=\"this.className='formActiv'\" onblur=\"this.className=''\" /><\/p>");
</script>
Ca s'affiche, mais j'ai un onclick qui doit me remplir le value="" via getElementById('myId') mais il ne fonctionne pas !
Et le validateur me refuse tout en bloc (element p not allowed par exemple).

Grmbl!
 
Haut