Newsgroup: it.comp.lang.javascript
Titolo: window.onload=function()

Dopo tempo immemorabile mi sto riavvicinando a javascript.
Ero abituato a gestire gli eventi chiamando le funzioni javascript 
direttamente dalla pagina html ...... <input.....onblur=faiQualcosa();>
Ora vedo che giustamente per separare completamente la logica dalla 
presentazione si associa all'evento window.onload una funzione 
all'interno della quel vengono gestiti gli eventi.
Scusate se mi esprimo terra terra.
Ho visto due versioni di window.onload=function().
Facendo un esempio, la prima e':
window.onload=function() {
   document.getElementsByTagName('form')[0].onsubmit=function() {
     return validateForm();
   }
}
la validateForm poi e' definita altrove.
La seconda e':
window.onload=function() {
   document.getElementsByTagName('form')[0].onsubmit=validateForm;
}
Quest'ultima e' piu' intuitiva oltre a richiedere meno righe di codice.
Ma qual'e' la differenza tra le due?
Entrambe danno lo stesso risultato.

 Ma qual'e' la differenza tra le due?
mah, a naso nessuna: devi passare per la prima nel caso la tua function
accetti parametri.
-- 
"e mai che mi sia venuto in mente
 di essere più ubriaco di voi
 di essere molto più ubriaco di voi"
									  F.D.A.

 intendevi per la seconda?
Io ho capito per la prima nel caso che a validateForm() debba passare 
parametri.

 intendevi per la seconda?
no...la seconda usa function() {...} per poter chiamare la function (con
parametri, volendo) associata all'evento, la prima assegna (e non puoi
specificare parametri).
Parlo della onsubmit ovviamente, non della onload dove ha in entrambi i
casi usato function() {   }
-- 
"La realtà è un'illusione causata dall'assenza di alcool."
									      A.

 }
Stai impostando innanzitutto una funzione anonima e differentemente
dagli esempi precedenti:
- lo stai facendo DENTRO un'altra funzione
- il corpo della funzione invoca un'altra funzione
Il primo punto comporta una closure, che se non si conosco e non si
sanno usare, è meglio evitare (soprattutto se non necessarie):
http://www.jibbering.com/faq/faq_notes/closures.html
Il secondo punto, invece, t'impedisce di usare il "this" come prima
dato che adesso punta a window (che è l'oggetto implicito in JS), e
non all'elemento form. Inoltre, devi esplicitamente passare tutti i
parametri che hai ricevuto.
Per dover di cronaca, è possibile ovviare a entrambe le cose usando
"apply":
http://developer.mozilla.org/en/docs/Core_JavaScript_1.5_Reference:Global_Objects:Function:apply
Ma in sintesi, se non ti serve davvero una closure in quel contesto
non usare questo approccio.
Un paio di note conclusive:
1.
E' anche possibile assegnare riferimenti a funzioni non anonime. Si
vede poco a giro e così, quelli che imparano osservando solo codice
altrui, non tutti lo sanno:
	window.onload = function init(){
		// do something
	}
2.
Quando facevi:
 
	<form onsubmit="return validateForm()">
Stavi creando una funzione anonima, il cui corpo era quel che avevi
impostato come valore dell'attributo. Del tutto equivalente a:
	myobjectform.onsubmit = function(){
		return validateForm()
	};
-- 
~ Il computer è una macchina progettata per velocizzare e
automatizzare
gli errori.

 
Grazie, molto gentile e disponibile come sempre, sto imparando piu' cose 
dalle tue spiegazioni che non dai doc.