Newsgroup: it.comp.lang.javascript
Titolo: Menu gerarchico modello Windows

Salve ho modificato questo menu che già dall'origine non è compatibile per
Netscape
http://html.it/dynamic/menu/menu14.htm
qualcuno potrebbe darmi una mano a renderlo compatibile oppure a segnalarmi
un sito dove c'è un menu del genere compatibile con NS, a me l'effetto delle
frecce non interessa...
Grazie
Pollicino

...

funziona sia con ie 5 sup che con netscape 7 ...
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>Prova Menu dinamico</title>
<meta http-equiv="Content-Type" content="text/html;
charset=iso-8859-1">
<style type="text/css">
div.mainmenu
{
	position:absolute;
	width:170;
}
div.submenu
{
	position:absolute;
	width:170;
}
</style>
<script language="JavaScript" type="text/javascript">
var n6up = (document.getElementById && !document.all) ? 1:0;
var ie5up = (document.all && document.getElementById) ? 1:0;
function MakeMenu( IdDiv )
{
	this.css = eval( 'document.getElementById("' + IdDiv + '").style' );
	this.element = eval( 'document.getElementById("' + IdDiv + '")' );
	this.leftohnepx = Number(document.getElementById(IdDiv).style.left);
	this.toptohnepx = Number(document.getElementById(IdDiv).style.top);
	this.x = this.leftohnepx;
	this.y = this.toptohnepx;
	this.height =  this.element.offsetHeight;
	this.HideDiv = Hide;
	this.ShowDiv = Show;
	this.MoveDiv = Move;
}
function Hide()
{
	this.css.visibility="hidden";
}
function Show()
{
	this.css.visibility="visible";
}
function Move( x, y )
{
	this.x = x;
	this.y = y;
	this.css.left = this.x;
	this.css.top = this.y;
}
function Init()
{
	MainMenu = new Array()
	MainMenu[0] = new MakeMenu('DivMainMenu1')
	MainMenu[1] = new MakeMenu('DivMainMenu2')
 
	SubMenu = new Array()
	SubMenu[0] = new MakeMenu('DivSubMenu1')
	SubMenu[1] = new MakeMenu('DivSubMenu2')
 
	for ( i=0; i<SubMenu.length; i++ )
	{
		SubMenu[i].HideDiv();
	}
	for ( i=1; i<MainMenu.length; i++ )
	{
		MainMenu[i].MoveDiv( 0, MainMenu[i-1].y + MainMenu[i-1].height )
	}
}
function Menu(id)
{
	for ( i=0; i<SubMenu.length; i++ )//chiudo tutti i sottomenu aperti
ad eccezione di quello da aprire
	{
		if( i!=id )
		{
			SubMenu[i].css.visibility="hidden";
		}
	}
	if( SubMenu[id].css.visibility=="hidden" )
	{	
		SubMenu[id].ShowDiv();
	}
	else
	{
		SubMenu[id].HideDiv();
	}
	for ( i=1; i<MainMenu.length; i++ )
	{ 
		if( SubMenu[i-1].css.visibility=="visible" )
		{
			MainMenu[i].MoveDiv( 0, MainMenu[i-1].y + MainMenu[i-1].height +
SubMenu[i-1].height )
//			MainMenu[i].MoveDiv( 0, 38 ) 
		}
		else
		{
			MainMenu[i].MoveDiv( 0, MainMenu[i-1].y + MainMenu[i-1].height )
//			MainMenu[i].MoveDiv( 0, 36 )
		}
	}			
}
</script>
</head>
<body leftmargin="0" topmargin="0" marginwidth="0" marginheight="0"
onLoad="Init();">
<div class="mainmenu" id="DivMainMenu1"><a href="#" onClick="Menu(0);
return false;">Menu1</a><br>
	<div class="submenu" id="DivSubMenu1">
	Sottomenu1_1
	Sottomenu1_2
	</div>
</div>
<div class="mainmenu" id="DivMainMenu2"><a href="#" onClick="Menu(1);
return false; ">Menu2</a><br>
	<div class="submenu" id="DivSubMenu2">
	Sottomenu2_1
	Sottomenu2_2
	</div>
</div>
</body>
</html>

Io me ne sono fatto uno molto semplice che sfrutta delle liste annidate 
e qualche funzione javascript per aprire e chiudere le liste. E' 
compatibile anche con ne6 (non so se anche col 4) e ha anche le frecce.
Se ti interessa ti posto il code ma forse è un po' più incasinato che 
con l'array di elementi.
