Newsgroup: it.comp.lang.javascript
Titolo: Comportamento strano dei layer in Mozilla

Salve a tutti,
ho un problema relativo a script js riguardanti il rendere visibile o
meno un layer.
Vi spiego meglio in dettaglio, ho un div inizialmente invisibile che
al click del mouse su un certo link diviene visibile.
Premessa: sotto IE funziona correttamente, mentre sotto Mozilla ha un
comportamento anomalo (probabilmente perche sto sbagliando da qualche
parte...).
Lato html ho il seguente codice:
[...]
  <tr>
    <td><a href="javascript:mostraLayer('1');"><i>Nizza
Nice</i></a></td>
  </tr>
  <tr>
    <td width="510" id="tbl1">
    <div id="1" style="overflow:hidden; visibility:hidden;
height:0px;">
   <table border="0" cellpadding="0" cellspacing="0" width="510">
[...]
lato js ho il seguente script:
function mostraLayer(id)
{
	if (document.getElementById)
	{
	document.getElementById(id).style.overflow = "auto";		
	document.getElementById(id).style.height =
document.getElementById("tbl"+id).height;
	document.getElementById(id).style.visibility= "visible";
	}
}
In pratica rendo visibile un certo layer x, il cui contenuto è una
data tabella con i dati che mi interessa rendere visibili o invisibili
cliccando appunto sul link.
Per non avere le scrollbar e spazi vuoti imposto l'altezza del layer
al contenuto della tabella.
Tale script cosi com'è apre si il Layer ma l'altezza è sbagliata e mi
introduce infatti le scrollbar che io non vorrei !!!
Se invece modifico lo script aggiungendo un banale alert funziona
correttamente e cioè il layer appare ed è dell'altezza giusta (quindi
non mi compaiono scroll-bar).
Qui lo script modificato:
function mostraLayer(id)
{
	if (document.getElementById)
	{
	document.getElementById(id).style.overflow = "auto";		
	alert(h);
	document.getElementById(id).style.height =
document.getElementById("tbl"+id).style.height;
	document.getElementById(id).style.visibility= "visible";
	}
}
Qualcuno ha idea del perche non funzioni correttamente se tolgo
l'alert ??? (che avevo messo solo per test !!!). Sotto IE è tutto ok
invece.
Vi ringrazio anticipatamente.
Fabrizio.

 height:0px;">
[...cut...]
Ciao, credo proprio che il problema sia nel fatto che hai assegnato id="1"
al div. Gli id degli elementi di una pagina html devono iniziare con una lettera.
Un suggerimento: invece di visibility: hidden e height:0 ti basta "display:none".
Se può interessarti, qui trovi diverse versioni dello script mostra/nascondi:
http://pro.html.it/articoli/id_539/idcat_11/pro.html
Ciao,
    Alessandro Fulciniti

     Alessandro Fulciniti
Ciao, 
ti ringrazio sia per il consiglio, che è stato risolutivo, sia per il
link al sito con gli esempi.
Mi è bastato sostituire "visibility: hidden e height:0" con
"display:none;" e "display:block;"
Piccola nota: assegnando come id un numero invece che lettera e numero
come mi hai indicato, il tutto funziona ugualmente bene !
Grazie ancora,
Fabrizio.

 come mi hai indicato, il tutto funziona ugualmente bene !
Vi è una (notevole) differenza tra "ciò che funziona ugualmente" e gli
standard. E non è solo una differenza di principio: se non segui gli
standard non potrai mai sapere se una futura release di qualsiasi browser
funzionerà.
Qua le specifiche per ID e NAME:
http://www.w3.org/TR/html401/types.html#type-name
-- 
"e mai che mi sia venuto in mente
 di essere più ubriaco di voi
 di essere molto più ubriaco di voi"
									  F.D.A.

 
http://www.w3.org/TR/html401/types.html#type-name
Buono a sapersi, grazie per l'ulteriore precisa e documentata puntualizzazione.
Fabrizio.