Probleme d'affichage de contenu dynamique en js [Résolu]

Messages postés
51
Date d'inscription
dimanche 15 août 2004
Statut
Membre
Dernière intervention
16 janvier 2009
- - Dernière réponse : bilouts
Messages postés
51
Date d'inscription
dimanche 15 août 2004
Statut
Membre
Dernière intervention
16 janvier 2009
- 20 nov. 2007 à 02:50
Bonjour,
J'ai eu beau creuser et encore creuser, je ne trouve pas. (meme sur javascriptfr :) )
Pour être bref, j'ai une page 'mes messages envoyés' contenant plusieurs options qui affichent les contenus sans rechargement de la page ;
lorsque je clique sur un message, j'ai un lien de type fonction comme suit : onClick='f(" <? echo $ligne['message']; ?>"); (sachant que $ligne['message'] est à la base enregistré sous la forme htmlspecialchars en php dans ma bdd).

Ensuite, ma fonction est la suivante (vraiment basique) :

function f(id)
{
document.getElementById('contenu_message').innerHTML=id
}

et le résultat est affiché dans une div avec id='contenu_message'.


Jusque la tout va bien, par contre, parfois, et sans que j'arrive à trouver pourquoi (à moins que les variables js est une taille maximum, ce qui m'étonnerais), l'affichage ne se fait pas dans la div :


voici un exemple qui marche et un autre qui marche pas (je montre le resultat 'code source' du navigateur) :

MARCHE:

[#


MARCHE PAS:

]


Je suis tout à fait dans l'embaras car les deux seraient sencés marcher ou ne pas marcher, mais un qui marche et l'autre qui marche pas,
ça me dépasse, alors si quelqu'un à une idée (meme toute petite) de la raison pour laquelle ça disfonctionne autant, je vous en serais reconnaissant.

Merci par avance


Corentin
Afficher la suite 

12 réponses

Meilleure réponse
Messages postés
12
Date d'inscription
mercredi 5 février 2003
Statut
Membre
Dernière intervention
25 novembre 2007
3
Merci
Bonjour Bilouts,
je te conseille d'etre au plus pres des normes html/xhtml et donc mets les attributs de tes balises entre double quote...
Ton pb provient de ton appel de fonction:
<script>
function f(id) {
    alert(id.toString());
}
</script>
[# r]    <!-- affiche ok()" -->
[# r]    <!-- Erreur javascript: unterminated string literal f("ok()"") -->
Le navigateur interprete ton javascript, et comme il suit en partie les normes, il trouve des double quote qui sont pour lui des delimiteurs de chaine.

Perso, pour du dev en javascript, j'utilise FireFox et l'extension Firebug qui permettent un debogage facile. De plus, j'active l'affichage des erreurs javascript ds IE lors des tests internavigateurs.

A+

ds

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 216 internautes nous ont dit merci ce mois-ci

Commenter la réponse de dsaunier
Messages postés
51
Date d'inscription
dimanche 15 août 2004
Statut
Membre
Dernière intervention
16 janvier 2009
3
Merci
Bon hé bien je crois que mon problème est 'en partie' résolu :

echo "".html_entity_decode($ligne['objet'])."";

avec la fonction str_replace(""","’",$ligne['message']) qui me change les " en ', mais comme qui dirait c'est un peu balot (mais l'important est que ça marche), tous les messages ou des personnes auront mis des citations genre "vive moi", ça se transformera systématiquement à l'affichage en 'vive moi', ce que je n'aime pas trop sur le principe.

Je mets toutefois un 'réponse acceptée' et merci à vous deux.

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 216 internautes nous ont dit merci ce mois-ci

Commenter la réponse de bilouts
Messages postés
51
Date d'inscription
dimanche 15 août 2004
Statut
Membre
Dernière intervention
16 janvier 2009
0
Merci
Bon je me dis que vous voulez le code source php qui élucidera peut être quelques mystères (attention, codé à la barbare).

//je précise tout de même avant que $ligne['id_reception']=='0' lorsqu'un message est envoyé en broadcast à tous les membres

<!-- /////////////// affichage messages envoyés /////////////// -->










<?
echo"Supprimer, objet, envoyé à, date, heure
";


$i=0;

$requete = "SELECT * FROM identification";

$resultat = mysql_query($requete) or die ('Erreur '.$requete.' '.mysql_error());

while($ligne = mysql_fetch_assoc($resultat))
{
$rec_id[$i]=$ligne['id_identification'];
$rec_name[$i]=$ligne['login'];
$i++;
}



$requete = "SELECT * FROM messages WHERE type='envoi' and id_envoi='".$_SESSION['id_pers']."' order by date, heure desc";

$resultat = mysql_query($requete) or die ('Erreur '.$requete.' '.mysql_error());

while($ligne = mysql_fetch_assoc($resultat))
{
$z=0;
for($j=0;$j<$i;$j++)
{

if($ligne['id_reception']=='0')
{
if($z>0)
{break;}
$z++;

$d = explode("-", $ligne['date']);

$message_rec[$j]=html_entity_decode($ligne['message']);



$jour=$d[2];
$mois=$d[1];
$annee=$d[0];

$amois[0] = '/01/';
$amois[1] = '/02/';
$amois[2] = '/03/';
$amois[3] = '/04/';
$amois[4] = '/05/';
$amois[5] = '/06/';
$amois[6] = '/07/';
$amois[7] = '/08/';
$amois[8] = '/09/';
$amois[9] = '/10/';
$amois[10] = '/11/';
$amois[11] = '/12/';
$nmois[0] = 'janvier';
$nmois[1] = 'février';
$nmois[2] = 'mars';
$nmois[3] = 'avril';
$nmois[4] = 'mai';
$nmois[5] = 'juin';
$nmois[6] = 'juillet';
$nmois[7] = 'aout';
$nmois[8] = 'septembre';
$nmois[9] = 'octobre';
$nmois[10] = 'novembre';
$nmois[11] = 'decembre';

$mois_lettres= preg_replace($amois, $nmois, $mois);


?>

[# ");'>
<?
echo"]suppr.,
".$ligne['objet'].",
tous,
".$jour." ".$mois_lettres." ".$annee.",
".$ligne['heure']."

";

}

else if($ligne['id_reception']==$rec_id[$j] && $ligne['type']=='envoi')
{
if($z>0)
{break;}
$z++;


$d = explode("-", $ligne['date']);

$message_rec[$j]=html_entity_decode($ligne['message']);



$jour=$d[2];
$mois=$d[1];
$annee=$d[0];

$amois[0] = '/01/';
$amois[1] = '/02/';
$amois[2] = '/03/';
$amois[3] = '/04/';
$amois[4] = '/05/';
$amois[5] = '/06/';
$amois[6] = '/07/';
$amois[7] = '/08/';
$amois[8] = '/09/';
$amois[9] = '/10/';
$amois[10] = '/11/';
$amois[11] = '/12/';
$nmois[0] = 'janvier';
$nmois[1] = 'février';
$nmois[2] = 'mars';
$nmois[3] = 'avril';
$nmois[4] = 'mai';
$nmois[5] = 'juin';
$nmois[6] = 'juillet';
$nmois[7] = 'aout';
$nmois[8] = 'septembre';
$nmois[9] = 'octobre';
$nmois[10] = 'novembre';
$nmois[11] = 'decembre';

$mois_lettres= preg_replace($amois, $nmois, $mois);


?>

[# ");'>
<?
echo"]suppr.,
".$ligne['objet'].",
".$rec_name[$j].",
".$jour." ".$mois_lettres." ".$annee.",
".$ligne['heure']."

";

}
}
}
?>
</table>



















Voila
Commenter la réponse de bilouts
Messages postés
13619
Date d'inscription
jeudi 13 février 2003
Statut
Membre
Dernière intervention
15 octobre 2013
26
0
Merci
Bonjour,

>>je me dis que vous voulez le code source php
    ben non. on n'a pas ta base de données dèjà !
          alors comment fait-on ?
    il vaudrait mieux la page html résultante
       et encore mieux : l'extrait de ce qui pose problème
       ( le minimum, mais tout ce qui est nécessaire )




<hr />                Cordialement            Bul         [mon Site]     [M'écrire]
Commenter la réponse de cs_bultez
Messages postés
12
Date d'inscription
mercredi 5 février 2003
Statut
Membre
Dernière intervention
25 novembre 2007
0
Merci
bonjour,
à vue de nez, essaye d'etre homogene pour les valeurs d'attribut de tes balises html, si tu ecris href="#" alors onclick="....", c'est plus propre. Ensuite, ta chaine contient des " et un ' qui pose pb. En faite en supposant que tu appelles ta fonction par onclick="f('ta chaine de caracteres');"  il faut que tu élimine les ', cad les &#039; ou que tu les remplace par la sequence d'echapement \' et cela marche.
Commenter la réponse de dsaunier
Messages postés
51
Date d'inscription
dimanche 15 août 2004
Statut
Membre
Dernière intervention
16 janvier 2009
0
Merci
Merci dsaunier pour ta réponse, j'essaye tout de suite. ;)


ps : pour bultez, difficile de donner plus de code que la, sachant que dans le premier post, vous avez les séquences qui posent problème, et dans le second, la quasi-totalité du code.
J'ai également donné la page résultante html (en tout cas la partie qui nous intéresse).
Pour la bdd, elle n'a rien à voir avec mon problème, il faut juste savoir que $ligne['objet'] est l'objet de mon message ; et $ligne['contenu'] est le contenu de mon message et en l'occurence ce qui pose problème, non en sortie de bdd, mais en déplacement par javascript.
Commenter la réponse de bilouts
Messages postés
51
Date d'inscription
dimanche 15 août 2004
Statut
Membre
Dernière intervention
16 janvier 2009
0
Merci
Bon je viens d'essayer en faisant :

[# ");'>


Resultat Source html :

]


Le changement dans la chaine se fait bien, mais ne s'affiche toujours pas dans ma div contenu_message.
Commenter la réponse de bilouts
Messages postés
13619
Date d'inscription
jeudi 13 février 2003
Statut
Membre
Dernière intervention
15 octobre 2013
26
0
Merci
<script type="text/javascript">
function f(id1)
{    document.getElementById('contenu_message').innerHTML=id1    }
</script>

[# lien]








¡————————¡——————————————————————————————————————————————————————————¡
|FireFox |regarder la "console d'erreurs" |
| | Outils / Console d'erreurs |
| | |
| | et mieux, télécharger FireBug |
¦————————¦——————————————————————————————————————————————————————————¦
|Internet|activer le deboggage : Outils/options Internet/Avancés |
|Explorer| dans la liste, sous "Navigation" : décocher |
| | ° Afficher une notification de chaque erreur de script |
| | ° Désactiver le débogage de Scripts (Internet Explorer) |
| | |
| | et mieux, télécharger le Debogger IE |
¦————————¦——————————————————————————————————————————————————————————¦
|K—Meleon|regarder la "console d'erreurs" |
| | Outils / Console d'erreurs |
¦————————¦——————————————————————————————————————————————————————————¦
|Opera |regarder la "console d'erreurs" |
| | utils / Asole d'erreurs |
¦————————¦——————————————————————————————————————————————————————————¦
|Safari |regarder Debug / Show JavaScript Console |
| | |
| |modif Fichier "Support:\Documents and Settings\utilisateur|
| |\Application Data\Apple Computer\Safari\Preferences.plist"|
| | y ajouter <key>IncludeDebugMenu</key> |
| | <true/> |
!————————!——————————————————————————————————————————————————————————!








<hr />                Cordialement            Bul         [mon Site]     [M'écrire]
Commenter la réponse de cs_bultez
Messages postés
51
Date d'inscription
dimanche 15 août 2004
Statut
Membre
Dernière intervention
16 janvier 2009
0
Merci
Merci beaucoup pour votre investissement,

Je regarde tout de suite si ça marche, en tout cas, ça me semble logique ;)
Commenter la réponse de bilouts
Messages postés
51
Date d'inscription
dimanche 15 août 2004
Statut
Membre
Dernière intervention
16 janvier 2009
0
Merci
alors en bref :


echo"[# ');">
<? echo html_entity_decode($ligne['objet']); ?>
]

->rien ne s'affiche dans le champ contenu


J'en déduit que c'est pour le moins étrange, même s'il est sur qu'il y a une raison à cela.
Commenter la réponse de bilouts
Messages postés
51
Date d'inscription
dimanche 15 août 2004
Statut
Membre
Dernière intervention
16 janvier 2009
0
Merci
>Pour les resultats dans les consoles d'erreur, aucun resultat sous safari, par contre, sous firefox juste :

Erreur : document.getElementById("sanitizeItem") has no properties
Fichier source : chrome://browser/content/browser.js
Ligne : 1274

Manque de chance, c'est juste le javascript de l'apparence de mon navigateur, donc rien en rapport avec ma page....


Par contre, ce qui peut faire avancer le chmilblick, c'est que lorsque je fais :

function f(id)
{
document.getElementById('contenu_message').innerHTML=id
window.alert(id)
}

window.alert() ne se lance pas du tout dans le cas de mon message qui ne s'affiche pas.

Il doit donc bel et bien s'agir d'un problème de crochet, mais la grande question demeure : comme le régler?

Je vous remercie en tout cas pour votre aide.

Corentin
Commenter la réponse de bilouts
Messages postés
51
Date d'inscription
dimanche 15 août 2004
Statut
Membre
Dernière intervention
16 janvier 2009
0
Merci
j'ajoute tout de même que si quelqu'un à une réponse au problème javascript
(car c'est tout de même bête de répondre à mon problème par du php et je suis sur qu'il doit y avoir une solution javascript pour éviter les bugs de crochets (peut être avec une fonction spécifique?)
qu'il me le fasse savoir.

le problème est simple (puisque désormais localisé),
comment envoyer un message à travers une fonction ( f('mon message') ) ayant un contenu qui peut contenir des doubles crochets ( " ) ou des simples crochets ( ' ) ?
Commenter la réponse de bilouts