Newsgroup: it.comp.lang.javascript
Titolo: DHTML.js, layer e netscape

Mentre in IE tutto funziona, in Netscape lo script che deve provvedere alla
sparizione del layer in apertura e quello che deve far apparire il layer al
click non funzionano (mentre funziona quello che fa sparire il layer al
mouseout). Ho usato layer al posto di div in NN (fatto bene?). Ecco in
sintesi la pagina:
<script src="DHTML.js" language="JavaScript"></script>
<layer id="Layer1" onmouseover="javascript:showLayer(Layer1,true)"
onmouseout="javascript:showLayer(Layer1,false)" left="212" top="69"
width="200" height="115" z-index="1">
<table >
eccecc
</table>
</layer>
<script language="JavaScript">
<!--
showLayer(Layer1,false)
///-->
</script>
<a href="javascript:showLayer(Layer1,true)">mostra</a>
--
ciao, Michele
se usi Outlook e rispondi R: e non RE:, patch:
http://utenti.tripod.it/vene/mail/patch.html
primo passo nel mondo NG: it.faq
per le prove: it.test

 sintesi la pagina:
Sorry, ma in questi giorni ero (sono) un po' di corsa, e ho letto solo
adesso... :(
Dunque...
<html>
<head>
<script src="DHTML.js" language="JavaScript"></script>
</head>
<body>
Fin qui, ovviamente, tutto ok... per la massima compatibilità tra i browsers
devi invece sempre usare o
<DIV> o <SPAN>: <LAYER> infatti non è supportato da Explorer... :(
Se vuoi che un layer sia invisibile in partenza, ti conviene impostarne
l'"invisibilità" con un foglio di stile, senza quindi dover ricorrere a JS:
 <div id="Layer1" style="position:absolute; left:212; top:69; width:200;
height:115; z-index:1; visibility:hidden;"
onmouseout="javascript:showLayer(Layer1,false)">
L'evento onmouseover, giustamente, non potrà mai essere né catturato né
gestito su un elemento invisibile, quindi è inutile metterlo. Puoi al
massimo gestire il mouseover su un altro oggetto dello schermo, che
ovviamente sia visibile in quel momento...
Per il mouseout, invece, nota che adesso lo metto 2 volte: sia nel tag <div>
(e
questo verrà letto solo da IE!!!) che in un altro tag <layer> che in questo
caso
aggiungiamo solo per Netscape (ricordo che in Netscape gli eventi mouseover
e mouseout
non si possono catturare in un <div> o uno <span>, quindi usiamo un <layer>
o un <a>)
 <layer onmouseout="javascript:showLayer(Layer1,false)">
     <table >
     eccecc
     </table>
 </layer>
Alla fine, quindi, chiudiamo il <div>
</div>
Purtroppo il caso particolare a cui stai lavorando tu è abbastanza delicato,
per quanto riguarda la piena compatibilità, quindi diventa difficile
implementare soluzioni "pulite" come si vorrebbe, e bisogna destreggiarrsi
più o meno come sopra, tra varie "porcate" di rimedi che però sono di fatto
il cuore del DHTML... :)
L'ultimo problema, stavolta mea est ei culpa, è che non ho avvertito che ho
visto che la forma showLayer(oggettoLayer,xxx) con Netscape da ancora
qualche problema per un brutto bug del browser... :(
Questo vale per i links e per altre situzioni su cui adesso non mi dilungo,
ma finché non risolvo il problema definitivamente metti tra virgolette il
nome del layer...
<a href="javascript:showLayer('Layer1',true)">mostra</a>
</body>
</html>
Fammi sapere...
Bye.
Ðarius.

 wrote in message
89sn8p$avt$4...@lacerta.tiscalinet.it...





 Spero che ciò aiuti nel debugging
Gulp!! Fammi un piacere, purtroppo non ho un mac a disposizione... vai nella
barra degli indirizzi di netscape, e scrivi "javascript:", dopo che ti è
comparso il messaggio "JavaScript Error...". Ti si aprirà una nuova finestra
che ti elenca tutti gli errori riscontrati nel documento... Avrei bisogno di
sapere cosa c'era scritto lì, per poter capire cosa è successo...
Cmq ho fatto un -find in files- nella mia cache e non ho trovato files che
includessero la libreria... a cosa ti riferisci esattamente? Postami il
codice incriminato, tutto quanto, così lo guardo ben bene...
Alla prox.
Bye.
Ðarius.

 brevità e gli devo aggiungere tutti gli attributi di DIV o va bene così?
No, quegli attributi sono necessari solo se usi un tag <div> o <span>. Per
il tag <layer> sono sottintesi e non serve specificarli...
Alla prox.
Ðarius.

 wrote in message
8a77gf$gbc$1...@lacerta.tiscalinet.it...


 Lo script incriminato era esattamente questo
Hmmm.... qui c'č il buon Marco Balestra che č l'esperto di mac... adessi gli
faccio un terzo grado, hihi... :))
Ti farņ sapere, intanto grazie per la segnalazione... ;)
Bye.
Šarius.

ecco gli errori registrati da un netscape 4.05 su mac
in apertura di pagina:
JavaScript Error:
http://asp4free.ravenna2000.it/michele_granzo/virus/virushtml/DHTML.js
,
line 31:
function does not always return a value.
function getImage(I,X){var
x,i,d='document.',a=d+'images[I]',l=d+"layers",b=X?X:l;if(x=eval(a))return
x;for(i in eval(b)){if(i=="length")continue;if((x=eval(b+'[i].'+a)) ||
((eval(b+"[i]."+l+".length")&&(x=getImage(I,b+"."+i+"."+l)))))return x}}
...........................................................................
.....
...........................................................................
.....
...........................................................................
.....
....^
JavaScript Error:
http://asp4free.ravenna2000.it/michele_granzo/virus/virushtml/DHTML.js
,
line 31:
test for equality (==) mistyped as assignment (=)? Assuming equality test.
function getImage(I,X){var
x,i,d='document.',a=d+'images[I]',l=d+"layers",b=X?X:l;if(x=eval(a))return
x;for(i in eval(b)){if(i=="length")continue;if((x=eval(b+'[i].'+a)) ||
((eval(b+"[i]."+l+".length")&&(x=getImage(I,b+"."+i+"."+l)))))return x}}
...........................................................................
.....
...........................................................................
.....
..........................................................................^
JavaScript Error:
http://asp4free.ravenna2000.it/michele_granzo/virus/virushtml/DHTML.js
,
line 31:
test for equality (==) mistyped as assignment (=)? Assuming equality test.
function getImage(I,X){var
x,i,d='document.',a=d+'images[I]',l=d+"layers",b=X?X:l;if(x=eval(a))return
x;for(i in eval(b)){if(i=="length")continue;if((x=eval(b+'[i].'+a)) ||
((eval(b+"[i]."+l+".length")&&(x=getImage(I,b+"."+i+"."+l)))))return x}}
...........................................................................
.....
..............^
cliccando sul tasto che deve causare l'apparizione del layer:
JavaScript Error:
http://asp4free.ravenna2000.it/michele_granzo/virus/virushtml/testata_n5.ht
m, li
ne 60:
showLayer is not defined.


 cerchero' un'altra donna dentro ai sogni di Tarzan...

test for equality (==) mistyped as assignment (=)? Assuming equality test.
A me sembra che abbia ragione il browser ;o))


 A me sembra che abbia ragione il browser ;o))
Fidarsi di un programma va bene solo fino ad un certo punto... ;)
Ad ogni modo il browser ha ragione per quanto riguarda il fatto che la
funzione non sempre ritorna dei valori. In effetti, se si specifica un layer
che non esiste, la funzione non ritorna nulla.
Ora ho risolto con un return "" alla fine della funzione, che viene eseguito
se il layer specificato non esiste. Conseguenza: se si specifica il nome di
un layer che non esiste, la funzione ritornerà l'oggetto document.layers
sotto netscape.
Ecco quindi la funzione aggiornata (la carico online tra qualche giorno, ma
intanto eccola qui)
function getImage(I,X){var
x,i,d='document.',a=d+'images[I]',l=d+"layers",b=X?X:l;if(x=eval(a))return
x;for(i in eval(b)){if(i=="length")continue;if((x=eval(b+'[i].'+a)) ||
((eval(b+"[i]."+l+".length")&&(x=getImage(I,b+"."+i+"."+l)))))return
x}return""}
Alla prox.
Ðarius.