Newsgroup: it.comp.lang.javascript
Titolo: aggiugnere codice all'evento onload

che tecnica posso usare per aggiungere codice javascript all'evento onload 
di window?
una cosa tipo
window.onload = funcA;
...
window.onload = funcB;
e alla fine esegue funcA e funcB.



Così esegue solo funcB, come immagino avrai già visto. Questo perché
sovrascrivi il riferimento. Se sai a priori quali sono le funzioni da
eseguire:
window.onload = function(){
	funcA();
	funcB();
}
Altrimenti, se il browser segue gli standard puoi fare:
	window.addEventListener("load",funcA,false);
	window.addEventListener("load",funcB,false);
In IE, invece:
	window.attachEvent("onload",funcA);
	window.attachEvent("onload",funcB);
Alternativamente, potresti anche andare a vedere se window.onload è già stata
assegnata, e in tal caso salvare tale riferimento ed eseguirlo, ma se vuoi
farlo per "n" esecuzioni, ti crei una catena di closure e sarebbe bene
evitarlo.
Per far le cose ad hoc dovresti costruirti un piccolo event manager. A giro ce
ne sono.
Ma se ti basta supportare IE e i browser standard, non ne hai bisogno.
-- 
Peace is a lie, there is only passion. Through passion, I gain strength.
Through strength, I gain power. Through power, I gain victory.
Through victory, my chains are broken. The Force shall free me. (Sith Code)

 window.onload = funcA;
allora, se funcA è una funzione quel codice non funziona.
eventualmente devi scrivere funcA() (se la tua funzione non usa
argomenti).
oppure funcA(arg0,arg1,argN) (se la funzione accetta argomenti)
in alternativa puoi mettere onload nel tag body:
<body onload="funcA()">
datti un'occhiata alle proprietà, ai metodi e ai gestori di eventi
dell'oggetto window:
http://www.devguru.com/Technologies/ecmascript/quickref/window.html
raenkrus

 oppure funcA(arg0,arg1,argN) (se la funzione accetta argomenti)
mi permetto di dissentire
-- 
Studiare e' lento, quando non hai professori rock

 ne sono
Avresti qualche consiglio o vado di google e chi trovo trovo?
-- 
Ciao
Fabio

 mi permetto di dissentire
Posso fare quello che ne sa? Non ne ho i gradi (e sicuramente neppure le
conoscenze) ma nessuno dei due ha pienamente ragione.
Se si prova infatti a fare prima:
function saluta() {
alert("Saluti e baci!");
}
window.onload=saluta;
E poi, in un'altra pagina:
function saluta() {
alert("Saluti e baci!");
}
window.onload=saluta();
Entrambi i codici funzionano. L'assenza delle parentesi indica al browser
di associare una funzione senza però eseguirla in quel momento. Si provi
infatti a fare:
function saluta() {
alert("ciao");
}
var b=saluta;
Se non si scrive dopo b() l'alert non appare. Si provi ora a fare:
function saluta() {
alert("ciao");
}
var b=saluta();
L'alert apparirà immediatamente, perché in questo caso si indica al
browser di lanciare la funzione (vista la presenza delle parentesi tonde).
Ora, con window.onload=saluta; la funzione viene lanciata comunque
immediatamente, perché si sovrascrive una proprietà (in questo caso
l'evento onload) di un oggetto (window) con un nuovo metodo (saluta) e
penso che il browser legga il contenuto di questo evento appena finita di
caricare la pagina e lanci ciò che ci trova dentro. Se si prova infatti a
fare:
function saluta() {
alert("ciao");
}
window.onload=saluta;
window.onload();
Apparirà l'alert anche la seconda volta (onload è diventato un metodo di
window), se invece si fa:
function saluta() {
alert("ciao");
}
window.onload=saluta();
window.onload();
Verrà restituito un errore (window.onload is not a function) proprio
perché la presenza delle parentesi (ovvero "window.onload=saluta()") non
ha associato una funzione a un metodo, ma ha lanciato una funzione.
Per i più esperti: è tutto corretto?! Spero di sì ;o)
Luke S.
-- 
questo articolo e` stato inviato via web dal servizio gratuito 
http://www.newsland.it/news
 segnala gli abusi ad 
ab...@newsland.it

 Avresti qualche consiglio o vado di google e chi trovo trovo?
Ti ripeto, ti serve *solo* se devi supportare, a livello di funzionalità (e
non accessibilità, bada bene), browser arcaici tipo Netscape 4.x.
Altrimenti per Opera, Firefox, Netscape > 4, IE e compagnia bella non hai
bisogno di farti event manager o roba del genere, usa semplicemente
attachEvent (IE) e addEventListener (il resto).


 Entrambi i codici funzionano.
ehm.
La funzione saluta viene eseguita in entrambi i casi, ovviamente.
Ma c'e' una sottile differenza.
Nel primo caso tu stai assegnando al metodo onload dell'oggetto window il
riferimento ad una funzione (saluta) che verra' richiamata *quando il
documento e' stato completamente caricato*.
Nel secondo, stai richiamando *in quel punto* la funzione saluta,
assegnando a window.onload il valore di ritorno (che non c'e').
