Newsgroup: it.comp.lang.javascript
Titolo: Netscape e document.layers.visibility

Chi mi consiglia come aggiustare questo script trovato in giro in modo
che funzioni con Netscape? L'intento ovviamente e' quello di far si'
che cliccando su un link compaia (o scompaia) il contenuto di un
layer.
Non capisco come si comporti NN nei confronti dei layer...
Grazie.
if (navigator.appName == "Netscape") {
layerRef="document.layers";
styleSwitch="";
} else {
layerRef="document.all";
styleSwitch=".style";
}
function showLayer(layerName) {
eval(layerRef+'["'+layerName+'"]'+styleSwitch+'.visibility="visible"');
}
function hideLayer(layerName) {
eval(layerRef+'["'+layerName+'"]'+styleSwitch+'.visibility="hidden"');
}
<div id="uno" style="position:absolute; top:10; left:100;
visibility:hidden">Layer UNO</div>
<a href="javascript:showLayer('uno')">Mostra</a>
<a href="javascript:hideLayer('uno')">Nascondi</a>
--
::. 
ghizz...@ghizza.com
::. coming soon -> 
www.ghizza.com

 Grazie.
Dunque, la verifica su Netscape falla con document.layers e non
sull'appName.
Per la visibilità invece, usa show e hide invece di visibility e hidden.
Tipo:
eval(layerRef+'["'+layerName+'"]'+styleSwitch+'.visibility="'+vedi+'"');
e
eval(layerRef+'["'+layerName+'"]'+styleSwitch+'.visibility="'+nascondi+'"');
Ovviamente nelle var vedi e nascondi metti (se Ns4.x)
vedi="hide";
nascondi="show";
Altrimenti:
vedi="visible";
nascondi="hidden";
PS: Ma perché escludi Mozilla? Fai una verifica su document.getElementById
(la visibilità o meno è uguale a MsIE: visible e hidden).
--
A presto. Ro!
Lo staff di Risorse.net
http://www.risorse.net

 nascondi="show";
LOL!
E' il contrario:
vedi="show";
nascondi="hide";


> nascondi="show";
Mi mostri un esempio "completo"?
Lo script deve funzionare ANCHE su Mozilla, non ho intenzione di
escluderlo...


 escluderlo...
Nell'esempio viene contemplato.


una selezione, passi un parametro alla funzione.
Uhm... troppo incasinato. Grazie comunque. Ecco come ho risolto il
problema:
var ie4 = (document.all) ? true : false;
var ns4 = (document.layers) ? true : false;
var ns6 = (document.getElementById && !document.all) ? true : false;
function hidelayer(lay) {
if (ie4) {document.all[lay].style.visibility = "hidden";}
if (ns4) {document.layers[lay].visibility = "hide";}
if (ns6) {document.getElementById([lay]).style.display = "none";}
}
function showlayer(lay) {
if (ie4) {document.all[lay].style.visibility = "visible";}
if (ns4) {document.layers[lay].visibility = "show";}
if (ns6) {document.getElementById([lay]).style.display = "block";}
}
<span id="newlayer" style="position:absolute;">Contenuto layer
1</span>
<a href="javascript:hidelayer('newlayer');">Nascondi</a> | 
<a href="javascript:showlayer('newlayer');">Mostra</a> | 


 }
Mmmm... fatto in quest'ordine temo sia parecchio rischioso,
puoi avere guai con tutti quei browser che, di default,
rispondono true a document.all e poi non lo supportano...
Io farei in questo modo:
var default= (document.getElementById) ? true : false;
var ie4 = (document.all) ? true : false;
var ns4 = (document.layers) ? true : false;
function hidelayer(lay) {
if (default) {document.getElementById([lay]).style.display = "none";}
else if (ie4) {document.all[lay].style.visibility = "hidden";}
else if (ns4) {document.layers[lay].visibility = "hide";};
}
ecc...
Tutti i browser con un supporto javascript decente
dovrebbero trovarsi egregiamente bene su default
(IE5+, NS6+, Mozilla, Opera ecc...)
mentre ie4 verrebbe dirottato su (ie4) e ns4 su (ns4)...
Prova se funziona... a occhio dovrebbe andare!
MaRoK

 ha scritto nel messaggio
news:qf3g2vs8i1mc47qkj...@4ax.com...


}
Mmmh... non sembra funzionare, come diceva il buon Guybrush
Threepwood. In piu', usando il "mio" (che poi mio non e') sistema:
var ie4 = (document.all) ? true : false;
var ns4 = (document.layers) ? true : false;
var ns6 = (document.getElementById && !document.all) ? true : false;
function hidelayer(lay) {
if (ie4) {document.all[lay].style.visibility = "hidden";}
if (ns4) {document.layers[lay].visibility = "hide";}
if (ns6) {document.getElementById([lay]).style.display = "none";}
}
function showlayer(lay) {
if (ie4) {document.all[lay].style.visibility = "visible";}
if (ns4) {document.layers[lay].visibility = "show";}
if (ns6) {document.getElementById([lay]).style.display = "block";}
}
<div id="porto" style="position:absolute; top:500px; left:500px;"><img
src="images/porto.gif" border="1"></div>
<a href="javascript:hidelayer('porto');">hide layer</a> | 
<a href="javascript:showlayer('porto');">show layer</a> | 
... ho scoperto che cosi' funziona bene, ma se imposto come
predefinito "hidden" il valore della DIV (style="visibility:hidden"),
siamo punto e a capo: gira su IE ma non su Mozilla, mentre io intendo
caricare la pagina con tutti i layers invisibili...


 Threepwood. In piu', usando il "mio" (che poi mio non e') sistema:
Che bello trovare qualche nostalgico...

> Mmmh... non sembra funzionare, come diceva il buon Guybrush Threepwood.
Eh... quanti bei ricordi di gioventù! :D
Probabilmente c'è qualche errorino chissà dove,
solo che ora non ho tempo di testarlo...
cmq se il tuo va... il problema è risolto! :)
MaRoK

cmq se il tuo va... il problema è risolto! :)
Eh no che non va... come dicevo:
[...]
... ho scoperto che [il mio] cosi' funziona bene, ma se imposto come
predefinito "hidden" il valore della DIV (style="visibility:hidden"),
siamo punto e a capo: gira su IE ma non su Mozilla, mentre io intendo
caricare la pagina con tutti i layers invisibili...
Non ho fretta, quando puoi ti va se vediamo insieme il suggerimento
che mi hai dato? Magari in pvt, questo thread stara' annoiando
molti...
Ciao, Ghizza.


Che bello trovare qualche nostalgico...
Oh, be', se hai tanta nostalgia... ho la versione per PC di Monkey
Island. Chiedi e ti sara' dato.


 if (ns6) {document.getElementById([lay]).style.display = "block";}
Imposta "visibility", non "display",
sono due cose diverse.
if (ns6) {document.getElementById([lay]).style.visibility = "hidden";}
if (ns6) {document.getElementById([lay]).style.visibility = "visible";}
<div id="porto"
style="position:absolute;top:100px;left:100px;visibility:hidden;"><img
src="tdBlu.gif" border="1"></div>
Cosi' funziona senzaltro:
<script>
function layerHV(){
(document.all?document.all[arguments[0]].style:document.layers?document.laye
rs[arguments[0]]:document.getElementById([arguments[0]]).style).visibility=(
arguments[1]?"hidden":"visible");
}
</script>
<div id="porto"
style="position:absolute;top:100px;left:100px;visibility:hidden;"><img
src="tdBlu.gif" border="1"></div>
<a href="javascript:layerHV('porto',true);">hide layer</a>
<a href="javascript:layerHV('porto',false);">show layer</a>
--
Ciao
  [web]   
www.gfcarlotti.it
   [mail]   
fra...@gfcarlotti.it
    [pgp]  
www.gfcarlotti.it/pgp/franco.asc

1 e 2 li ho anch'io; era uscito il 3 (che ho) ma faceva schifo, nessun
paragone con i classici...

Cosi' funziona senzaltro:
[snip]
Grande, perfetto. Grazie.
Propongo di aggiungere lo script nelle FAQ di Jsdir, che ne dite?
Mi sembra abbastanza utile.
