Newsgroup: it.comp.lang.javascript
Titolo: Perchè questo codice non funziona con NETSCAPE ?!

Il codice che segue lo utilizzo per far cambiare un'immagine quando
essa viene sfiorata dal mouse. Essa funziona molto bene con Internet
Explorer 4, ma non vuole saperne di Netscape.
Qualcuno potrebbe essere cosě gentile da correggere il codice in modo
che funzioni con Netscape?!
GRAZIE.
browser = (((navigator.appName == "Netscape") &&
(parseInt(navigator.appVersion) >= 3 )) ||
((navigator.appName == "Microsoft Internet Explorer") &&
(parseInt(navigator.appVersion) >= 4 )))
if (browser)
{
	img1_on=new Image(140,45);
	img1_on.src="images/img1_on.jpg";
	img1_off=new Image(140,45);
	img1_off.src="images/img1_off.jpg";
	img2_on=new Image(140,45);
	img2_on.src="images/img2_on.jpg";
	img2_off=new Image(140,45);
	img2_off.src="images/img2_off.jpg";
	img3_on=new Image(140,45);
	img3_on.src="images/img3_on.jpg";
	img3_off=new Image(140,45);
	img3_off.src="images/img3_off.jpg";
	img4_on=new Image(140,45);
	img4_on.src="images/img4_on.jpg";
	img4_off=new Image(140,45);
	img4_off.src="images/img4_off.jpg";
}
function rollIn(imgName)
{
	if (browser)
	{
		document[imgName].src=eval(imgName + "on.src");
	}
}
function rollOut(imgName)
{
	if (browser)
   {
		document[imgName].src=eval(imgName + "off.src");
   }
}





Ecco, un altro che usa le STRINGHE per indicizzare gli indici degli array
document.images[0]
document.images[1]
document.images[2]
...

the fly on the net ha scritto:

In realtà ogni immagine ha effettivamente un nome, costuito da una
stringa e document.images['nomeImmagine'] rappresenta effettivamente
l'immagine. A me il codice di rollover scritto da Randall Flag funziona
perfettamente, a patto che imgName sia una stringa delimitata da apici.

Funziona con IE, ma non con Netscape .... :)
Allora, per l'ennessima volta GLI ARRAY SONO UN'INSIEME DI VARIABILI OD
OGGETTI CON LO STESSO NOME, PER DISTINGUERLI SI USANO DEI NUMERI CRESCENTI
DALLO ZERO RACCHIUSI TRA PARENTESI QUADRE.
Questo da quando esistono i linguaggi di programmazione (la sintassi di
JavaScript deriva dal C), e non sarà certo la Microsoft a cambiare questo
dato di fatto.
Se non volete utilizzare document.images[n], usate document.nomeimmagine e
non document.images['nomeimmagine'], fate questo piacere alla Netscape che
ci tiene tanto.

DALLO ZERO RACCHIUSI TRA PARENTESI QUADRE.
Beh, in Pascal si possono utilizzare indici contenenti anche caratteri.
Qualcosa del tipo
for i='a' to 'z'
    write (matrice(i));
Quindi e' solo da stabilire se javascript ha o non ha questa capacita'.
Se ce l'ha e' netscape in torto, se non ce l'ha explorer ha implementato una
caratteristica in piu' (come fa di solito) non compatibile con lo standard.
Chissa', magari verra' recepita...
ciao
gelty
--
Visita 
http://www.sifor.it
Elimina *toglimi* per le risposte

Perché i char, racchiusi tra apici semplici ' e non doppi " non hanno il
carattere nullo di terminazione della stringa  ( \0 in C), e praticamente
sono una variabile intera a 8 bit.
Con alcuni linguaggi addirittura se provate a visulizzare una variabile di
quel tipo come decimale, vi verrà visualizzato il corrispondente codice
ASCII senza bisogno di conversioni.

>Chissa', magari verra' recepita...

Un attimo, in Pascal si usano sempre e comunque gli apici singoli (almeno
per quello che mi ricordo).
E comunque non e' quello il punto. In C, se in una matrice usi 'A', ti
verra' in pratica restituita la matrice[65] (perdonatemi, non ricordo la
sintassi precisa...), in Pascal invece il risultato della matrice('A')
inteso come valore e non come variabile.
Spero di essere stato chiaro...


Hai pienamente ragione.
Ho scritto una cazzata immonda.
Quello che ho scritto io vale per il C.
Comunque penso che il pascal accettando stringhe non faccia altro che fare
una conversione in numero (essendo un linguaggio meno rigido rispetto al C).
Quello invece che fà IE è diverso: dalla proprietà name degli oggetti image
di ricava il relativo numero di indice dell'array. Della sua utilità si può
discutere fino ad esaurire lo spazio in questo server, stà di fatto che ha
creato un casino a tutti gli web master che dopo provavano lo stesso codice
con Netscape.
Un'altra cosa: così facendo si è creato un paradosso:
document.images['nomeimmagine'].name
diventa totalmente inutile, in quanto la proprietà name serve a chi conosce
il nome dell'immagine e vuole ricavarsi il numero progressivo dell'indice
associato all'immagine.
CIAO :)
la mosca nella rete