Bonjour, je vais démarrer l'apprentissage du JS donc être plus souvent dans ce thème là que j'avais jusque là délaissé.
Mon premier truc : faire afficher et disparaitre un DIV quand on clique sur un lien ( thème réccurent ). J'ai trouvé et testé quelques scripts, qui ne sont pas déstructif d'information en cas d'indisponibilité de JS ( que j'ai glané dans le forum ) et donc tout va bien.
Sauf que quand j'introduit PHP la dedans , il apparait un souci que je pense deviner et qui concerne l'ordre des étapes dans lequel les différentes choses sont gérées ( mais je peux me tromper aussi , la dedans je suis novice )
voila un bout de code épuré mais représentatif
Alors on le comprend, ce script joue sur la propriété display
: none ou block que prend l'attribut Style des balises Div "i" ou i est un chiffre.
Si est actif , le DIV est caché jusqu'a ce qu'on clique sur le lien s'ouvre et se referme a volonté
Si JS est désactivé, alors display est sur ' ' , donc le paramètre par défaut donc block , donc le DIV s'affiche.
ce script fonctionne donc parfaitement jusqu'a ce qu'on mette du php et du sql la dedans, qui " annule " l'effet de la fonction cache_si_JS_actif().
voila le bout de code différent avec PHP qui génèrer non pas un DIV mais X div dont le contenu provient de la BDD ou on recupere entre autre l'ID de la ligne poru etre sur que la base crée des id="DIVx" ou x est unique....
Ce code marche très bien aussi mais la fonction cache_si_JS_actif appelée au window.onload , elle ne marche plus et donc tout apparait...
ma question ( pffff ...on y arrive !)
Qu'est ce que je fais mal ? Normalement je crois comprendre que le PHP est d'abord généré par le serveur et normalement le JS s'execute après donc tout div qui ressemble a id=" div'x' devrait donc etre affecté par la fonction et les div se cacher mais ce n'est pas le cas.....
J'ai aussi essayé d'enlever le window.onload et de mettre le script a la fin du <html> ou meme dans le php lui même mais rien n'y fait !
j'en suis la ......et ne vois plus quoi essayer d'autre mais c'est certainement ma meconnaissance du JS qui m'empeche de trouver ...
Modifié par RoseGrenouille (24 Mar 2007 - 15:38)

Mon premier truc : faire afficher et disparaitre un DIV quand on clique sur un lien ( thème réccurent ). J'ai trouvé et testé quelques scripts, qui ne sont pas déstructif d'information en cas d'indisponibilité de JS ( que j'ai glané dans le forum ) et donc tout va bien.
Sauf que quand j'introduit PHP la dedans , il apparait un souci que je pense deviner et qui concerne l'ordre des étapes dans lequel les différentes choses sont gérées ( mais je peux me tromper aussi , la dedans je suis novice )
voila un bout de code épuré mais représentatif
<html>
<head>
<script>
function visibilite(thingId,txtAff,txtMasque)
{
var targetElement; var targetElementLink;
targetElement = document.getElementById(thingId) ;
targetElementLink = document.getElementById(thingId+'Link');
if (targetElement.style.display == "none")
{
targetElement.style.display = "block" ;
targetElementLink.innerHTML = txtMasque ;
} else {
targetElement.style.display = "none" ;
targetElementLink.innerHTML = txtAff ;
}
}
</script>
<script>
function cache_si_JS_actif()
{
for (var i = 1 ; i <= 4 ; i++) {
document.getElementById('Div'+i).style.display="none";
}
}
window.onload = cache_si_JS_actif;
/* Si JS est actif chez le client, la fonction cache_si_JS_actif est appelée.
Dans le cas contraire, rien ne se passe.*/
</script>
</head>
<body>
<a href="javascript:visibilite('Div1','Afficher','Masquer');" id="Div1Link">Afficher<noscript> | Ne fonctionne pas | Javascript est désactivé sur votre machine)</noscript></a>
<div id="Div1" syle="display=''">
<p>La grotte a toujours un profil horizontal, comme une galerie, et ce dernier est modelé par l’eau. La caverne quant à elle, résulte généralement d’un mouvement de terrain et constitue une cavité de plus grande envergure.</p>
</div>
</body>
</html>
Alors on le comprend, ce script joue sur la propriété display
: none ou block que prend l'attribut Style des balises Div "i" ou i est un chiffre.
Si est actif , le DIV est caché jusqu'a ce qu'on clique sur le lien s'ouvre et se referme a volonté
Si JS est désactivé, alors display est sur ' ' , donc le paramètre par défaut donc block , donc le DIV s'affiche.
ce script fonctionne donc parfaitement jusqu'a ce qu'on mette du php et du sql la dedans, qui " annule " l'effet de la fonction cache_si_JS_actif().
voila le bout de code différent avec PHP qui génèrer non pas un DIV mais X div dont le contenu provient de la BDD ou on recupere entre autre l'ID de la ligne poru etre sur que la base crée des id="DIVx" ou x est unique....
while ( $foo=mysql_fetch_array($bar))
{
echo '<a href="javascript:visibilite(\'Div'.$foo['DIV_ID'].'\',\'Afficher\',\'Masquer\');" id="Div'.$foo['DIV_ID'].'Link">Afficher<noscript> | Ne fonctionne pas | Javascript est désactivé sur votre machine)</noscript></a>
<div id="Div'.$foo['DIV_ID'].'" syle="display=\'\'">';}
Ce code marche très bien aussi mais la fonction cache_si_JS_actif appelée au window.onload , elle ne marche plus et donc tout apparait...
ma question ( pffff ...on y arrive !)
Qu'est ce que je fais mal ? Normalement je crois comprendre que le PHP est d'abord généré par le serveur et normalement le JS s'execute après donc tout div qui ressemble a id=" div'x' devrait donc etre affecté par la fonction et les div se cacher mais ce n'est pas le cas.....
J'ai aussi essayé d'enlever le window.onload et de mettre le script a la fin du <html> ou meme dans le php lui même mais rien n'y fait !
j'en suis la ......et ne vois plus quoi essayer d'autre mais c'est certainement ma meconnaissance du JS qui m'empeche de trouver ...
Modifié par RoseGrenouille (24 Mar 2007 - 15:38)