Newsgroup: it.comp.lang.javascript
Titolo: IE e FF comportamento diverso

Sto cercando di recuperare un vecchio programma e non capisco perchè le due 
linee seguenti vengono interpretate bene da IE, mentre invece FF salta a 
piedi pari la prima, quella riferita a almanacco, pur apparentemente uguali 
tra loro.
.
----------------------------------------------------------
if (document.datigiorno.num_giorno_anno.value ==3){
document.write('<script src="almanacco/alma3.js"
---------------------------------------------------------
if (document.datigiorno.num_mese.value == 3){
document.write('<script src="calendario/calendario_3.js"
--------------------------------------------------------
Grazie 

 if (document.datigiorno.num_giorno_anno.value == 3){

 if (document.datigiorno.num_giorno_anno.value == 3){
Purtroppo non lo č. Credo ci sia uno di quegli errori che IE corregge, e FF 
no.
Forse non interpreta bene la data. C'č modo di intercettare e vedere cosa ha 
composto lo script? 

 
Domanda stupida, ma datigiorno cos'č?
e num_giorno_anno e num_mese?
Se dovessero essere due controlli all'interno di un form, prova a optare 
per la forma
<input .... id="num_giorno_anno"/> e <input .... id="num_mese"/> (va 
bene anche per le select, eventualmente) e nel javascript dire
document.getElementById('num_giorno_anno').value == 3 (e idem per il mese)
Cosě di sicuro funziona.
nel modo che hai mostrato tu (sempre che num_giorno_anno e num_mese 
siano nomi di controlli in un form) non mi sorprende che su FF non vada.
LP
-- 

Do più informazioni, sperando in una soluzione.
E' un programma che modificherei per altri scopi, se riuscissi ad avere lo 
stesso risultato sia con IE che con FF.
Intercetta il numero del giorno dell'anno (1-365), il numero del mese 
(1-12), il numero del giorno della settimana (1-31) e il giorno della 
setttimana (lun-dom).
Poniamo che il giorno sia giovedi 15 maggio, verrà visualizzato un evento 
per il giovedi, un evento per il 15 del mese, un evento per maggio, un 
evento per il giorno corrispondente dell'anno, non faccio i calcoli, diciamo 
135 sull'anno.
Per il giorno della settimana, giorno del mese, mese non ho problemi, Ma con 
il giorno dell'anno si.
Lo script nella pagina è questo:
<SCRIPT LANGUAGE="JavaScript">
  today = new Date();
  start = new Date(today.getYear(),00,01);
  giorno_settimana = (today.getDay());
  giorno_anno = ((today.getTime()-start.getTime()) / 1000 / 60 / 60 / 24 );
  now = new Date()
  giorno_mese = today.getDate()
  numero_mese = today.getMonth()+1
  document.write('<form name=datigiorno><input type=hidden 
name=num_giorno_anno size=5 value='+Math.round(giorno_anno)+'>');
  document.write('<input type=hidden name=numerogiornosettimana size=5 
value='+giorno_settimana+'>');
  document.write('<input type=hidden name=nome_giorno size=5 
value='+today+'>');
  document.write('<input type=hidden name=data_giorno size=5 
value='+giorno_mese+'>');
  document.write('<input type=hidden name=num_mese size=5 
value='+numero_mese+'>');
  document.write('</form>');
  window.alert("Oggi è il giorno numero 
"+document.datigiorno.num_giorno_anno.value+" dell'anno");
</SCRIPT>
ad un certo punto viene richiamato uno script per ogni funzione, in questo 
caso:
<SCRIPT SRC="almanacco.js">
</SCRIPT>
almanacco.js è composto da 365 righe uguali a questa, con numerazione 
crescente:
if (document.datigiorno.num_giorno_anno.value == 135){
document.write('<script src="almanacco/alma135.js"></script>');
}
e va a caricare (dovrebbe, in IE lo fa), alma135.js che è questo:
document.write('<table border="0" width="100%" height="100%" cellspacing="0" 
cellpadding="0">');
document.write('<tr><td width="100%"><p align="right"><font size="1" 
face="Verdana"<b><i>');
document.write("S. AGATONE");
document.write('<br><br></b></i></font></td></tr><tr><td width="100%"><font 
size="1" face="Verdana">');
document.write('<img src="almanacco/logo.gif" align="left" border="1" 
width="65" height="60">');
document.write('<b><font color="#a53939">');
document.write('Santo del giorno');
document.write('</font><br></b>');
document.write("Nessun evento per questo giorno");
document.write('<br><br></font></td></tr></table>');
Questo è l'unico che non funziona su FF.
Il codice non è mio originale, ma faceva parte di una rivista di 4-5 anni 
fa, che avevo modoficato nell'html per altro uso. All'epoca usavo solo IE e 
non mi ero accorto di niente. Adesso che l'ho abbandonato del tutto, vorrei 
sapere, anche a livello di conoscenza, perchè non funziona.

 
Beh, IE ha sempre avuto un modo tutto suo di fare le cose, e purtroppo 
molte persone hanno fatto (e fanno ancora) codice secondo lo standard di 
IE (che per molte cose non coincide affatto con gli standard ufficiali).
Pensa che una volta ho sentito un (sedicente) webmaster rispondere ad 
una mia lamentela per un sito non visibile se non con IE con la seguente 
frase "Ormai Internet Explorer ha vinto la guerra dei browser".
Prova a modificarlo in questo modo, oppure prova a ristudiarlo e 
reimplementarlo seguendo gli standard (magari avvalendoti di tecniche 
più moderne).
Di soluzioni alternative a quelle di far scrivere il codice al 
javascript (senza scomodare PHP, perl, JSP, ASP o altro lato server) ce 
ne sono almeno 5 (per lo meno questi sono quelli che al volo mi vengono 
in mente)
Non ti resta che sperimentare.
LP
-- 


No, era riferito allo script iniziale della pagina. Nessuno dei 365 alma1, 
alma2, ecc viene letto.
Adesso proverò ad applicare le modifiche che mi hai consigliato.
Grazie per l'interessamento. 

 attributi tra apici.
Forse ci sono troppo contro: se metto gli apici smette di funzionare del 
tutto sia in IE che in FF.
Adesso studio la stampata e vedo di riprogettarlo, manuale alla mano.
Grazie comunque 

 TP/BP/Delphi/jscr/&c, FAQ items, links.


Sì, cannato io
Gli apici devono essere alternati, o escapizzati
quindi
document.write('<input type="hidden" name="num_mese" id="num_mese" 
size="5" value="'+numero_mese+'">');
Avendo aperto la stringa con l'apice singolo, un altro apice singolo non 
escapizzato ( \' ) viene inteso come fine stringa, e quello che c'è dopo 
come continuazione del comando.
LP
--