JS : échapper des quotes

Consultez la formation au référencement naturel Google de WebRankInfo / Ranking Metrics

Romuald
WRInaute occasionnel
WRInaute occasionnel
 
Messages: 163
Inscription: Lun Mai 02, 2005 11:54

JS : échapper des quotes

Message le Ven Mai 05, 2006 11:10

J'ai un bout de code à générer via un document.write("");
ça ressemble à :
Code: Tout sélectionner
<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 ?


dd32
Modérateur
Modérateur
 
Messages: 3261
Inscription: Ven Sep 09, 2005 10:21

Message le Ven Mai 05, 2006 11:13

Ca marche ça ?
Code: Tout sélectionner
<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>

Eric 2A
WRInaute occasionnel
WRInaute occasionnel
 
Messages: 147
Inscription: Dim Fév 26, 2006 12:00

Message le Ven Mai 05, 2006 13:40

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.


dd32
Modérateur
Modérateur
 
Messages: 3261
Inscription: Ven Sep 09, 2005 10:21

Message le Ven Mai 05, 2006 13:45

merci pour l'info Eric 2A, je ne savais pas :wink:

Eric 2A
WRInaute occasionnel
WRInaute occasionnel
 
Messages: 147
Inscription: Dim Fév 26, 2006 12:00

Message le Ven Mai 05, 2006 13:54

Source : SELFHTML

SELFHTML a écrit: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.

Romuald
WRInaute occasionnel
WRInaute occasionnel
 
Messages: 163
Inscription: Lun Mai 02, 2005 11:54

Message le Ven Mai 05, 2006 16:30

Malheureusement cela ne fonctionne pas, à cause, je pense des ' que j'ai via les onclick=" ' ' "

Merci à vous.

Romuald
WRInaute occasionnel
WRInaute occasionnel
 
Messages: 163
Inscription: Lun Mai 02, 2005 11:54

Message le Ven Mai 05, 2006 16:44

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 '.


dd32
Modérateur
Modérateur
 
Messages: 3261
Inscription: Ven Sep 09, 2005 10:21

Message le Ven Mai 05, 2006 17:00

Tu veux dire qu'il faut écrire document.write("") sur une seule ligne de code, c'est cela ?

Romuald
WRInaute occasionnel
WRInaute occasionnel
 
Messages: 163
Inscription: Lun Mai 02, 2005 11:54

Message le Ven Mai 05, 2006 17:27

Pour Opéra oui...!

Par contre le validateur n'aime pas, et les navigateurs du coup non plus...
Ca ressemble à ça :
Code: Tout sélectionner
<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!


Formation recommandée sur ce thème :

Formation Référencement naturel Google : apprenez une méthode efficace pour optimiser à fond le référencement naturel dans Google de façon durable... Formation animée par Olivier Duffez et Fabien Facériès, experts en référencement naturel.

Tous les détails sur le site Ranking Metrics : programme, prix, dates et lieux, inscription en ligne.

Lectures recommandées sur ce thème :



Qui est en ligne

Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 0 invités