Newsgroup: it.comp.lang.javascript
Titolo: Tag Layer in Firefox

Salve,
ho questa pagina:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"
http://www.w3.org/TR/html4/loose.dtd
">
<html>
<head>
<title>E-Commerce - Sericomi</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<link rel="stylesheet" type="text/css" href="defaultmenu.css" >
</head>
<SCRIPT LANGUAGE="JavaScript" type="text/javascript">
function voce(livello,nome,link,icona,foglia)
{
  this.livello = livello;
  this.nome = nome;
  this.link = link;
  this.icona = icona;
  this.foglia = foglia;
}
var elemento = new Array()
var i = 0;
elemento[++i] = new voce(1,'Catalogo','','',false);
  elemento[++i] = new voce(1,'Antinfortunistica','','',false);
  elemento[++i] = new voce(2,'Guanti','catalogo.php?id_grp=ANT01','',true);
  elemento[++i] = new
voce(2,'Adesivi','catalogo.php?id_grp=ANT02','',true);
  elemento[++i] = new voce(2,'Scarpe Da
Lavoro','catalogo.php?id_grp=ANT03','',true);
  elemento[++i] = new voce(2,'Grembiule
Pvc','catalogo.php?id_grp=ANT04','',true);
  elemento[++i] = new
voce(2,'Giubbini','catalogo.php?id_grp=ANT05','',true);
  elemento[++i] = new voce(2,'Caschi
Protettivi','catalogo.php?id_grp=ANT06','',true);
  elemento[++i] = new
voce(2,'Abbigliamento','catalogo.php?id_grp=ANT07','',true);
  elemento[++i] = new voce(2,'Machere
Protettive','catalogo.php?id_grp=ANT08','',true);
  [CUT]
</SCRIPT>
<SCRIPT LANGUAGE="JavaScript" type="text/javascript">
var nascosto = new Array();
for (c=1; c<=i; c++)
{
  if (elemento[c].livello==1)
    nascosto[c] = false;
  else
    nascosto[c] = true;
}
function disegna()
{
  var code = '';
  code += '<TABLE BORDER=0><TR><TD NOWRAP>';
  code += '<A HREF="' + elemento[1].link + '" TARGET="_self">';
  if (elemento[1].icona=='')
    code += '<IMG SRC="images\\home.gif" ALIGN="left" BORDER=0>';
  else
    code += '<IMG SRC="' + elemento[1].icona + '" ALIGN="left" BORDER=0>';
  code += elemento[1].nome + '</A><BR>';
  for (c=2; c<=i; c++)
  {
    if (!nascosto[c])
    {
      var app = elemento[c];
      for (k=2; k<=app.livello; k++)
        code += '<IMG SRC="images\\i.gif" ALIGN="left" BORDER=0>';
      if (app.foglia)
      {
        if (c!=i && app.livello==elemento[c+1].livello)
          code += '<IMG SRC="images\\t.gif" ALIGN="left" BORDER=0>';
        else
          code += '<IMG SRC="images\\l.gif" ALIGN="left" BORDER=0>';
        if (app.icona=='') app.icona = 'images\\html.gif';
          code += '<A HREF="' + app.link + '" TARGET="mainFrame">';
        code += '<IMG SRC="' + app.icona + '" ALIGN="left"
BORDER=0>&nbsp;';
      }
      else
      {
        if (nascosto[c+1])
          code += '<A HREF="javascript: apri(' + c + ')"><IMG
SRC="images\\xl.gif" ALIGN="left" BORDER=0></A><IMG
SRC="images\\cartella1.gif" ALIGN="left" BORDER=0>&nbsp;';
        else
          code += '<A HREF="javascript: chiudi(' + c + ')"><IMG
SRC="images\\-l.gif" ALIGN="left" BORDER=0></A><IMG
SRC="images\\cartella2.gif" ALIGN="left" BORDER=0>&nbsp;';
        }
        code += app.nome + '</A><BR>';
      }
    }
    code += '</TD></TR></TABLE>';
    if (document.all)
      esplora.innerHTML = code;
    else
    {
      document.layers.esplora_nn.document.open();
      document.layers.esplora_nn.document.write(code);
      document.layers.esplora_nn.document.close();
    }
}
function apri(n)
{
  var c = n + 1;
  while (elemento[c].livello>elemento[n].livello)
    c++;
  for(k=n+1; k<c; k++)
    if (elemento[k].livello==elemento[n].livello + 1)
      nascosto[k] = false;
  disegna();
}
function chiudi(n)
{
  var c = n + 1;
  while (elemento[c].livello>elemento[n].livello)
    c++;
  for(k=n+1; k<c; k++)
    nascosto[k] = true;
  disegna();
}
</SCRIPT>
<body ONLOAD="disegna()" leftmargin="0" topmargin="0">
<p></p>
<DIV ID="esplora">
<LAYER NAME="esplora_nn">
</LAYER>
</DIV>
</body>
</html>
Il mio problema è che mentre in explorer e opera funziona tutto bene, in
firefox il menu non si apre, come se vi fosse qualcosa che non va nel tag
layer.
Purtroppo non ho grandi esperienze di javascript e n on riesco a capire
cosa non vada.
Qualcuno saprebbe aiutarmi?
Grazie mille in anticipo
-- 
ORF3O
Golden Chicken
Regia: Leung Chun 'Samson' Chiu
Nazione: Hong Kong
http://www.asianworld.it/subrisultato.php?id_subq=174

 layer.
'mbè, layer è proprietario netscape 4, nessun altro browser sa cosa sia ...
a naso direi che quel codice è stravecchio (considera come browser IE +
netscape 4.x).
Sempre così a naso vedo dei "if(document.all)", sostituiscilo/i con
"if(document.getElementById)" (perdi compatibilità con IE4 ma la acquisti
per tutti i browser Gecko). Non ho studiato tutta quella spataffiata di
codice, comincia col sostituirlo e a vedere se funziona altrimenti riposta
il problema con le correzioni effettuate.
-- 
"Ho smesso di fumare.
 Vivrò una settimana di più.
 E in quella settimana pioverà a dirotto"
									    W.A.

 document.getElementById
Ti ringrazio, purtroppo, anche sostituendo document.all con
document.getElementById in firefox il menu non compare (mentre funziona
comunque con ie e opera :(
-- 
ORF3O
Love & Pop
Regia: Hideaki Anno
Nazione: Giappone
http://www.asianworld.it/subrisultato.php?id_subq=219

 comunque con ie e opera :(
Se puņ esservi utile ad aiutarmi :) la console javascript di firefox mi
indica quest'errore
"esplora is not defined"
dunque il problema sembra stare qui:
    if (document.getElementById)
      esplora.innerHTML = code;
    else
    {
      document.layers.esplora_nn.document.open();
      document.layers.esplora_nn.document.write(code);
      document.layers.esplora_nn.document.close();
    }
Nel frattempo ho sostituito il <body onload... col window.onload....
-- 
ORF3O
Park , The
Regia: Wai Keung Lau
Nazione: Hong Kong
http://www.asianworld.it/subrisultato.php?id_subq=172

     }
E farebbe anche bene. Nel codice che hai pubblicato, non è definita alcuna
variabile di nome "esplora".
Tra l'altro fai il checking di getElementById e poi non lo usi.. non è
esattamente così che funziona. 
Tornando a noi, hai un div con id "esplora", ma non una variabile. Non è la
medesima cosa.
Che per IE lo sia, e quindi funzioni, è un altro paio di maniche (in verità
ci sarebbe modo di attivarlo anche per FF, ma rabbrividisco al solo
pensiero). Ergo un codice più corretto sarebbe il seguente:
	if (document.getElementById)
		document.getElementById("esplora").innerHTML = code;
	else if (document.all){
		document.all.esplora.innerHTML = code;
	}else if (document.layers){
		document.layers.esplora_nn.document.open();
		document.layers.esplora_nn.document.write(code);
		document.layers.esplora_nn.document.close();
	}else{
		alert("Il tuo browser supporta javascript ma nessun tipo di DOM");
	}
A onor del vero per fare le cose "ammodino" bisognerebbe anche verificare
che getElementById, document.all e document.layers restituiscano un valore
valido per l'elemento esplora / esplora_nn... ma nel tuo caso dovrebbe
andar bene ugualmente
-- 
"When you have eliminated the impossible, whatever remains,
however improbable, must be the truth."
on air ~ "Unknown Artist - Everything burns"

 	}
Ti ringrazio per l'aiuto.
Purtroppo, di javascript non so molto e per questo menu devo appoggiarmi a
script altrui.
Modificando lo script come da te indicato giŕ andava meglio, ma a quanto
pare v'erano altri problemi oltre a quello.
Ho alla fine optato per la sostituzione dello script con altro, ed ora va
tutto bene.
Se tentennavo nel farlo era perchč dovevo adattarlo ad una pagina dinamica
che ricostruisse il menu tramite php ed un database.
Perň a quanto pare č stato meglio perdere un pň di tempo intorno ad una
materia che conosco che girare intorno ad un problema che non conosco.
Grazie ancora a te ed a Cristiano
-- 
ORF3O
Memento Mori
Regia: Tae yong Kim e Kyu Dong Min
Nazione: Corea del Sud
http://www.asianworld.it/subrisultato.php?id_subq=102