quand se produit window.onload ?
Le
yvon.thoravalNO-SPAM
Excusez moi pour une question sibasique :
quand se produit window.onload ?
je pensais, sans doute naïvement, que ça se produit quand la fenêtre est
chargée, ben avec Camino non.
basiquement, mon script, après quelques tripatouillages fait un :
window.onload=run();
il bloquait quand il était dans les balises <head/>
je l'ai mis juste avant </body>, ça marche nickel-chrome et donc, quand
ça ne marchait j'ai mis un alert("toto"); dans ma fonction run().
donc la question est de savoir si oui ou non window.onload c'est qd le
nav a fini de charger la page ou si ce n'est vrai qu'en théorie, les
implémentations c'est autre chose ;-)
ou, autre possibilité, me goure-je ?
(qq'un qui n'a plus fait de js+dom+xhtml+css depuis plusierus années)
--
yt
quand se produit window.onload ?
je pensais, sans doute naïvement, que ça se produit quand la fenêtre est
chargée, ben avec Camino non.
basiquement, mon script, après quelques tripatouillages fait un :
window.onload=run();
il bloquait quand il était dans les balises <head/>
je l'ai mis juste avant </body>, ça marche nickel-chrome et donc, quand
ça ne marchait j'ai mis un alert("toto"); dans ma fonction run().
donc la question est de savoir si oui ou non window.onload c'est qd le
nav a fini de charger la page ou si ce n'est vrai qu'en théorie, les
implémentations c'est autre chose ;-)
ou, autre possibilité, me goure-je ?
(qq'un qui n'a plus fait de js+dom+xhtml+css depuis plusierus années)
--
yt

Poser une question


Ah ?
S'il n'y a pas d'erreur dans ce que tu as écrit, il exécute la fonction
run() arrivé à cette ligne pour en affecter le résultat à window.onload !
Tu voulais écrire sans doute :
window.onload = run;
qui affecte la fonction à l'événement ?
Ben... ;-)
C'est dur de s'y remettre...
--
Y.D.
Bon, c'est un peu normal. Tentative d'explication :
Le "traiteur d'évènement " (traduction perso de "event handler" ;-))
"onload" s'applique à l'objet "window" dans le cas où tu écris :
window.onload=run();
Ce qui signifie que lorsque l'objet "window" sera chargé, la fonction run()
sera déclenchée.
Or l'objet "window" n'est créé que par une balise BODY ou par une balise
FRAMESET (ou par la méthode "open()").
Si tu mets "window.onload=run();" dans le HEAD, la balise BODY n'a pas
encore été déclarée (lue par le navigateur), l'objet "window" n'a donc pas
été créé, ta fonction ne peut donc pas s'appliquer.
La meilleure manière d'utiliser "onload" pour une page c'est :
<body onload="fonction();">
D'une manière générale, si dans le HEAD tu déclares :
<script>
instruction 1;
instruction 2;
instruction 3;
...
</script>
Ces instructions vont s'exécuter dès la lecture par le navigateur, elles ne
doivent donc pas concerner des éléments de la page car ceux-ci n'ont pas
encore été créés.
--
A'tchao
Le Fou
http://perso.club-internet.fr/ehiller/
http://club.exocet.free.fr/
http://www.ffessm-cd84.com/
[La traduction à peu près adoptée est "gestionnaire d'événement" (avec
deux accents aigus sur ÉvÉnement)...]
Désolé, ce que tu dis est faux. Quand javascript tombe sur :
window.onload=run();
il évalue la partie droite de l'affectation : run() -- la fonction est donc
immédiatement exécutée puisque c'est ce que signifie run(). Le résultat retourné
(ou null si rien n'est retourné) est conservé, puis la partie gauche est évaluée
et l'affectation enfin effectuée.
Ce que voulait écrire apparemment Yvon Thoraval est :
window.onload=run; // sans parenthèses
La partie droite est évaluée : c'est une référence de variable définie quelque
part avant par :
function run(){...}
ou encore par :
var run=Function("...");
ou
var run=function() {...};
javascript garde donc la référence vers cet objet puis l'affecte à la partie
gauche window.onload. Dans ce cas à la fin du chargement de la page, événement
load de l'objet window, la fonction run sera exécutée car window.onload est une
référence vers la fonction run.
Tiens donc ! window est créé avant tout autre objet : il est le conteneur du
document et correspond physiquement à une partie de l'écran (dans le cas où la
page est lue avec ce dispositif bien sûr). Pour javascript, il est l'étendue,
le champ (mauvaise traduction de scope) du script. On peut l'ajouter -- ou
l'omettre -- devant tous les objets du navigateur et des variables globales que
crée un script.
Exemples :
var a="Test";
if(window.a == a) window.alert("window.a==a"+" est true");
(à placer dans un script en premier dans le head pour voir, ou même, bien que
non conforme, avant <html>)
window.onload = run; peut s'écrire window.onload = window.run; ou plus simplement onload = run;
Personnellement je préfère dans un script :
onload = fonction;
Ce qui explique qu'Yvon en plaçant son instruction à la fin du body obtenait le résultat espéré :
tous les éléments étaient créés, window.onload=run(); semblait fonctionner puisque la fonction run était exécutée, mais si une image un petit peu longue à charger ou une feuille de style ou... que le script devait manipuler s'y était trouvée... Déception !
--
Y.D.
Ouais, bravo est merci pour cette précision, en plus je le savais )))
j'ai réalisé une partie de mon code comme ça :
function viewsCollection() {
this.array = new Array();
this.add = add;
this.size = size;
this.showOne = showOne;
function add(o) {
this.array[this.array.length] = o;
}
function size() {
return this.array.length;
}etc...
}
tout s'éciare, merci !
en fait ce sont simplement mes "()" qui m'ont causé ce pb )))
--
yt
Je me permet de répondre car il se trouve justement que je faisais hier
des recherches sur l'orthographe correcte du mot "évènement".
L'orthographe correcte est celle avec les deux accents aigus, mais celle
avec l'accent grave tend à s'imposer, et est maintenant acceptée par
l'académie française.
http://fr.wikipedia.org/wiki/Discuter:Évènement
http://www.ivry.cnrs.fr/rectifications/
--
Bobe (Aurélien Maille)
http://webnaute.net
"la vie d'un geek est un combat perpétuel contre l'imperfection"