Newsgroup: it.comp.lang.javascript
Titolo: Codice per Netscape 4.5.

Salve.
Avrei bisogno di un aiuto.
Ho il seguente codice:
document.images[ArrayMesi[i].name].src = ArrayMesi[i].img0;
document.images[ArrayMesi[a].name].src = ArrayMesi[a].img1
La variabile "i" fa parte di un ciclo for mentre "a" viene passata alla
funzione contenente il codice.
Questo funziona perfettamente con IE4.
Non funziona con Netscape.
Ho provato il seguente codice:
mese = ArrayMesi[i].name;
mese1 = ArrayMesi[a].name;
document.mesiDiv.document.images[mese].src = ArrayMesi[i].img0;
document.mesiDiv.document.images[mese1].src = ArrayMesi[a].img1;
Questo funziona perfettamente con Netscape versione 4.5 per Linux ma non
funziona per niente con Netscape versione 4.5 per windows.
Qualcuno mi puo' suggerire come modificare il suscritto codice per
renderlo funzonante anche con Netscape 4.5?
Grazie.
--
Posted from 
mta03-acc.tin.it
 [212.216.176.34]
via Mailgate.ORG Server - 
http://www.mailgate.org

Da quello che capisco dal codice, 'mese' e 'mese1' sono delle stringhe.
Prova ad usare delle variabili intere (tipo 'i' oppure 'a').

 Prova ad usare delle variabili intere (tipo 'i' oppure 'a').
Cioe'?
mese e mese1 sono variabili che adranno a contenere la stringa "gennaio"
che e' appunto il nome di una immagine del documento interessato.
Perche' dovrei utilizzare interi?
Ciao.
--
Posted from 
mta01-acc.tin.it
 [212.216.176.32]


Mi spiego meglio. Gli array (come spero saprai) sono un insieme di variabili
o oggetti con lo stesso nome. Le variabili possono essere di qualsiasi tipo
(stringhe di testo, numeri interi, numeri a virgola mobile, data, ecc.),
così come gli oggetti (immagini, links, plugins, ecc.)
Per poter accedere alle singole variabili o oggetti si usa una specie di
indice racchiuso tra parentesi quadre. L'indice è numero crescente che parte
da zero.
L'oggetto document.images[0] quindi corrisponde alla prima immagine
dichiarata nel testo html con il tag <IMG>, document.images[1] alla seconda,
e così via.
E' giusto quindi che netscape non consenta di accedere alle immagini
inserendo un testo del genere:
document.images["gennaio"].src
Il fatto che IE riesca ad ottenere da Arraymesi[0].name (che corrisponde a
"gennaio") il numero 0 è una cosa in più che fà Microsoft. Stà di fatto che
non è il modo giusto di procedere e possibilmente bisogna rispettare le
specifiche originali di JavaScript (che sono della Netscape).
CIAO

 
Ho provato allora la seguente linea "document.immagine.src =
gennaio.img0;"
dove "immagine" e' il nome di una figura del documento mentre "gennaio"
e' il nome di un oggetto da me creato.
Ancora con IE4 funziona ed anche con Netscape 4.5 per Linux mentre
Netscape 4.5 per windows non ne vuole sapere.


e' il nome di un oggetto da me creato.
Mi dovresti dire che tipo di oggetto è gennaio e cosa contiene img0


 
Ok. Allora questa e' la funzione per inizializzare l'array seguita dal
costruttore degli oggetti:
function initArray(n){
	this.lenght = n;
	for (var i = 0; i < n ; i++) this[i] = 0;
}
ArrayMesi = new initArray(12);
var NumMese = 0;
function mese(name,img0,img1){
	ArrayMesi[NumMese]=this;
	this.index=NumMese++;
 
this.name
=name;
	this.img0=img0;
	this.img1=img1;
	//this.vis_mese=vis_mese;   //metodo
}
mentre questi sono tre dei dodici oggetti:
gennaio = new
mese("gennaio","/images/gennaio0.gif","/images/gennaio1.gif");
febbraio = new
mese("febbraio","/images/febbraio0.gif","/images/febbraio1.gif");
marzo = new mese("marzo","/images/marzo0.gif","/images/marzo1.gif");
Ciao e grazie per la disponibilita'.
--
Posted from 
mta03-acc.tin.it
 [212.216.176.34]


A parte il fatto che non capisco perché vai a complicarti in questo modo la
vita (dato che ci sono molti modi più semplici di fare lo swap delle
immagini), ho analizzato comunque lo script e mi pare corretto.
L'unico appunto che mi viene in mente è questo:
ArrayMesi[NumMese]=this;
praticamente è come scrivere:
ArrayMesi[NumMese]=mese();
ma tu hai inizializzato l'array a zero (che sono numeri interi).
'mese()' al contrario non restituisce nulla. Dovrestri provare ad inserire
un'instruzione alla fine della funzione mese() tipo:
return name;
però dopo non puoi inizializzare a zero gli ArrayMesi e poi assegnargli una
stringa!
Casomai puoi fare una cosa del genere
for (var i = 0; i < n ; i++) this[i] = "";
Prova così e poi sappimi dire.


Provato e non e' cambiato nulla.
Ho anche provato il seguente comando per NS4:
for ( i = 0; i < 11; i++)
document.layer.document.images[ArrayMesi[i].index].src = ArrayMesi[i].img0;
ArrayMesi[i].index dovrebbe contenere i valori 0, 1 ,2 ,3 ecc.
Funziona ancora con Netscape 4.5 per Linux ma quello per windows
non ne vuole sapere.
Un'altra curiosita': se utilizzo il comando di cui sopra con IE4,
ovviamente riadattato, funziona ma ha un comportamento diverso
da Netscape 4.5 per Linux (poiche', come ho gia' detto, quello
per windows non funziona). Fa casini con gli array delle immagini
del documento, nel senso che ...images[0] per NS4 e' una mentre
per IE4 e' un'altra. Ho usato quindi "ArrayMesi[i].index" per
NS4 per Linux e "ArrayMesi[i].name" per IE4, cosi' funziona 
perfettamente con tutti e due. Non so chi dei
due (NS4 o IE4) abbia
ragione fatto sta che mi sto rendendo conto che e' un casino
adattare il codice per entrambi.
Ciao e grazie per la disponibilita'.
-- 
per rispondere togli <toglimi> dall'indirizzo di posta. 


Nel mia pagina web ho questo script per fare lo swap:
<script language="JavaScript">
var normale = new Array (new Image, new Image, new Image, ...)
var evidenziato = new Array (new Image, new Image, new Image, ...)
normale[0].scr="norm001.gif"
normale[1].scr="norm002.gif"
normale[2].scr="norm003.gif"
...
evidenziato[0].scr="evi001.gif"
evidenziato[1].scr="evi002.gif"
evidenziato[2].scr="evi003.gif"
...
function evidenzia(numero)
{
  if(evidenziato[numero].complete)
  {
     document.images[numero].src=evidenziato[numero].src
  }
}
function normalizza(numero)
{
  if(normale[numero].complete)
  {
     document.images[numero].src=normale[numero].src
  }
}
</script>
<body>
<a href="..." onMouseOver="evidenzia(0)" onMouseOut="normalizza(0)">
<img src="norm001.gif" ...></a>
<a href="..." onMouseOver="evidenzia(1)" onMouseOut="normalizza(1)">
<img src="norm001.gif" ...></a>
<a href="..." onMouseOver="evidenzia(2)" onMouseOut="normalizza(2)">
<img src="norm001.gif" ...></a>
...
</body>
A me funziona perfettamente sia su netscape 4.0 che I.E. 4.0. In teoria
dovrebbe funzionare anche su NS 3.0 perché le specifiche le ho prese da
quella realease. So di sicuro invece che I.E. 3.0 non supporta 'new Image()'
e quindi ho messo un controllo all'inizio che manda un utente I.E. 3.0 in
un'altra pagina.
Spero che sia tutto chiaro.