Newsgroup: it.comp.lang.javascript
Titolo: continuando compatibilità browser

Ciao ragazzi anche oggi ho un dubbio su metodi e proprietą (finora "pensavo" 
di aver capito)document.getElementById("Destdiv").style.visibility = 
"hidden"; (ma cercando su internet trovo questa sintassi)Errore: 
document.getElementById("Destdiv") has no propertiesho riletto il post sui 
metodi e proprietą mi verrebbe di dire che = "hidden" non va messoe ho 
provato diverse alternative ma non trovo la soluzione giusta.PS ma il codice 
per firefox e compatibile anche su Netscape? 

 per firefox e compatibile anche su Netscape?
Netscape non Gecko no, perché ha un DOM preistorico (se volessi
documenterti: document.layers).
-- 
Ro!

 Errore: document.getElementById("Destdiv") has no properties
La sintassi è corretta. Il suggerimento di Ro! è giusto ma c'è anche
un'altra possibilità: nel tuo documento html non c'è alcun elemento che
abbia id "Destdiv". Occhio alle maiuscole-minuscole: se è vero che Explorer
non sembra distinguere, ad esempio, "Destdiv" da "DestDiv" da "destdiv", è
altrettanto vero che FireFox la distinzione la fa.
-- 
Nando [?]
Apostolo della Prova

 document.getElementById("Destdiv") has no properties
Significa che il valore di ritorno del metodo "getElementById()" non è un
riferimento ad un oggetto con delle proprietà.
Presumibilmente, sarà null.
Ovviamente "null" non ha alcuna proprietà, tanto meno "style".
getElementById ritorna "null" nel momento in cui non trova alcun oggetto con
ID pari a quello specificato come parametro.
I motivi per cui può non trovarlo, sono quelli che ti sono già stati detti da
Nando e Ro: non esiste alcun elemento nell'albero del documento con quell'ID o
non esiste ancora.
un codice di questo tipo:
<script type="text/javascript">
	document.getElementById("destDiv").style.visibility="hidden";
</script>
<div id="destDiv"></div>
darà errore, perché il browser eseguirà lo script *prima* di aver letto che
esiste un div con id "destDiv", e averlo quindi aggiunto all'albero del
documento.
Similmente, otterrai lo stesso errore se farai:
<div id="destDiv"></div>
<script type="text/javascript">
	document.getElementById("Destdiv").style.visibility="hidden";
</script>
In quanto, benché l'elemento sia stato aggiunto all'albero del documento prima
di eseguire il codice, hai sbagliato a scrivere l'ID da recuperare.
Questa seconda casistica è equivalente a recuperare il riferimento di un
elemento che non esiste.
Ricorda che, come ha detto Nando, l'ID che passi è case-sensitive. Tranne che
per IE, dato che pesca sempre dal medesimo calderone di document.all; e quindi
non fa testo (accetta anche il name). Ma ad esempio - e per fortuna - anche il
css engine di IE è case sensitive, e quindi non applicherebbe un CSS definito
con "#destDiv" a un elemento "DestDiv".
Note:
- Spesso si inserisce il codice che recupera riferimenti di elementi,
nell'event handler "onload". Tale evento viene scatenato solo quando la pagina
è stata completamente caricata, e quindi sei sicuro che l'elemento sarà
sicuramente presente nel document tree (a me no di non sbagliare ID,
ovviamente).
Ovviamente ci sono delle eccezioni per le quali non è indicato impostare
alcune cose nell'onload, proprio perché si scatena solo a pagina completamente
caricata; mentre vi sono altre cose che si possono fare praticamente solo
grazie a tale evento (ad esempio, impostare una scritta di precaricamento e
farla scomparire a pagina caricata).
- E' buona abitudine, soprattutto laddove non si è certi che esista un dato
elemento (vuoi perché la pagina è costruita dinamicamente lato server, vuoi
perché si utilizza script generici su pagine diverse, et similia) controllare
il valore di ritorno delle DOM API. Ad esempio:
function hide( idEl ){
	var el = document.getElementById(idEl);
	if ( el && el.style )
		el.style.visibility = "hidden";
}
In questo modo verifica che el sia una verità logica, e in tal caso passa a
fare lo stesso controllo con style. Tradotto in altri termini, se
getElementById restitusce un riferimento valido in base all'id passato, che
abbia anche style come proprietà, allora nasconde l'elemento. Altrimenti non
fa nulla (e quindi non ti va neppure in errore).
-- 
Chuck Norris ha fatto il giro del mondo in 80 giorni in un quarto d'ora.