Bonjour !
J'ai un problème avec un menu javascript qui a été posté sur votre forum dans la section des scripts utiles.
Le code en question est le suivant :
A dire vrai, le problème ne vient pas vraiment du javascript en lui même (raison pour laquel j'ai hésité à poster dans la section XHTML).
Voilà mon problème :
J'utilise ce code pour un menu composé de rubriques et sous rubriques.
Cependant, certaines rubriques ne comportent parfois aucune sous rubrique.
Voilà le code de mise en page :
Pour les rubriques ne possèdant pas de sous rubriques, j'ai essayé de "tricher" afin que le contenu de la balise <dl> ne s'affiche pas (puisque vide) en ajoutant :
Cette astuce marche parfaitement sous firefox mais pas sous internet explorer(étrange ?
).
J'avoue ne pas voir comment procéder autrement.
Ce pourquoi je solicite votre aide =)
Je vous remercie par avance pour votre aide !
Modifié par black (11 Nov 2008 - 17:05)
J'ai un problème avec un menu javascript qui a été posté sur votre forum dans la section des scripts utiles.
Le code en question est le suivant :
<script type="text/javascript" >
var drawerMenu = {
inc : 5,
elements : new Array,
timers : new Array,
construct : function()
{
var dls = document.getElementsByTagName('dl');
var n = 0;
for(var i = 0; i < dls.length; i++)
{
if(dls[ i].className == 'menu')
{
n++;
drawerMenu.timers[n] = 0;
dls[ i].onmouseover = drawerMenu.triggerShow;
dls[ i].onmouseout = drawerMenu.triggerHide;
dls[ i].targetElement = n;
for(var j = 0; j < dls[ i].childNodes.length; j++)
{
if(dls[ i].childNodes[j].nodeType == 1)
{
if(dls[ i].childNodes[j].tagName == 'DD')
{
dls[ i].childNodes[j].style.position = 'relative';
dls[ i].childNodes[j].style.overflow = 'hidden';
dls[ i].childNodes[j].style.height = '0px';
for(var k = 0; k < dls[ i].childNodes[j].childNodes.length; k++)
{
if(dls[ i].childNodes[j].childNodes[k].nodeType == 1)
{
if(dls[ i].childNodes[j].childNodes[k].tagName == 'UL')
{
drawerMenu.elements[n] = dls[ i].childNodes[j].childNodes[k];
dls[ i].childNodes[j].childNodes[k].style.position = 'absolute';
dls[ i].childNodes[j].childNodes[k].style.top = '-'+dls[ i].childNodes[j].childNodes[k].offsetHeight+'px';
}
}
}
}
}
}
}
}
},
triggerShow : function()
{
if(drawerMenu.timers[this.targetElement]) clearInterval(drawerMenu.timers[this.targetElement]);
drawerMenu.timers[this.targetElement] = setInterval('drawerMenu.show('+this.targetElement+')', 30);
},
triggerHide : function()
{
if(drawerMenu.timers[this.targetElement]) clearInterval(drawerMenu.timers[this.targetElement]);
drawerMenu.timers[this.targetElement] = setInterval('drawerMenu.hide('+this.targetElement+')', 40);
},
show : function(i)
{
var ul = drawerMenu.elements[ i];
var t = parseInt(ul.style.top);
var inx = Math.ceil(-t/drawerMenu.inc);
if(t+inx < 0)
{
ul.style.top = (t+inx) +'px';
ul.parentNode.style.height = (ul.offsetHeight+t+inx) + 'px';
}
else if(t < 0)
{
ul.style.top = '0px';
ul.parentNode.style.height = ul.offsetHeight + 'px';
}
else
{
clearInterval(drawerMenu.timers[ i]);
drawerMenu.timers[ i] = 0;
}
},
hide : function(i)
{
var ul = drawerMenu.elements[ i];
var t = parseInt(ul.style.top);
var inx = Math.ceil(t/drawerMenu.inc);
if(inx == 0) inx = -1;
if(t+inx > -ul.offsetHeight)
{
ul.style.top = (t+inx) +'px';
ul.parentNode.style.height = (ul.offsetHeight+t+inx) + 'px';
}
else if(t > -ul.offsetHeight)
{
ul.style.top = -ul.offsetHeight + 'px';
ul.parentNode.style.height = '0px';
}
else
{
clearInterval(drawerMenu.timers[ i]);
drawerMenu.timers[ i] = 0;
}
}
}
window.onload = drawerMenu.construct;
A dire vrai, le problème ne vient pas vraiment du javascript en lui même (raison pour laquel j'ai hésité à poster dans la section XHTML).
Voilà mon problème :
J'utilise ce code pour un menu composé de rubriques et sous rubriques.
Cependant, certaines rubriques ne comportent parfois aucune sous rubrique.
Voilà le code de mise en page :
<?php
//On récupère toutes les catégories et leur titre
$datacat = mysql_query ('SELECT cat_id, cat_titre FROM site_categorie ORDER BY cat_ordre') or die (mysql_error());
//On lance une boucle while qui affiche toutes les catégories
while($requetecat = mysql_fetch_array($datacat))
{
?>
<dl class="menu">
<a href="index.php?cat=<?php echo $requetecat['cat_id'] ;?>"><dt><?php echo $requetecat['cat_titre'] ;?></dt></a>
<?php
//On récupère les rubriques appartenants au catégories respectives
$nbrRub = mysql_result(mysql_query('SELECT COUNT(*) FROM site_rubrique WHERE rub_cat_id = "'.$requetecat['cat_id'].'"'), 0);
$datarub = mysql_query('SELECT rub_titre, rub_id
FROM site_categorie
LEFT JOIN site_rubrique ON site_categorie.cat_id = site_rubrique.rub_cat_id
WHERE site_categorie.cat_id = "'.$requetecat['cat_id'].'"
ORDER BY site_rubrique.rub_ordre') or die (mysql_error());
if($nbrRub == 0)
{
$maxSize = "style=max-height:0px;";
}
?>
<dd>
<ul <?php echo $maxSize;?>>
<?php
//On lance une boucle while qui affiches toutes les rubriques appartenant à la catégorie
while($requeterub = mysql_fetch_array($datarub))
{
?>
<li><a href="index.php?cat=<?php echo $requetecat['cat_id'] ;?>&rub=<?php echo $requeterub['rub_id'] ;?>"><?php echo $requeterub['rub_titre'] ;?></a></li>
<?php
}
?>
</ul>
</dd>
</dl>
<?php
}
?>
Pour les rubriques ne possèdant pas de sous rubriques, j'ai essayé de "tricher" afin que le contenu de la balise <dl> ne s'affiche pas (puisque vide) en ajoutant :
if($nbrRub == 0)
{
$maxSize = "style=max-height:0px;";
}
?>
<dd>
<ul <?php echo $maxSize;?>>
Cette astuce marche parfaitement sous firefox mais pas sous internet explorer(étrange ?

J'avoue ne pas voir comment procéder autrement.
Ce pourquoi je solicite votre aide =)
Je vous remercie par avance pour votre aide !
Modifié par black (11 Nov 2008 - 17:05)