Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

diff entre window.onload et

7 réponses
Avatar
pere.noel
je sais bien qu'il est préférable d'écrie :

window.onload = setup();

que :

<body onload="setup(); return false;">

mais chez moi (???), je suis "obligé" d'utiliser la seconde solution
sinon j'ai une erreur à la console js :

> Erreur : document.getElementById("menu_local") has no properties
> Fichier source :
> file:///Users/yvon/work/CSS/essais/MenuFixe/js/menu.js
> Ligne : 4

--- menu.js ------------------------------------------------------------
var m_local;

function setup(){
m_local =
document.getElementById('menu_local').getElementsByTagName('li');
}
function select(what){
for(var i = 0;i < m_local.length; i++) m_local[i].className =
'un_selected';
what.className = 'selected';
}

window.onload = setup();
------------------------------------------------------------------------
--- index.html (extrait) ----------------------------------------------
<div
class="right_fixe"
id="menu_local">
<ul class="menu_local">
<li onclick="select(this)">
<a href="#un">Un</a>
</li>
[...]
</ul>
</div>
------------------------------------------------------------------------

je ne vois pas pourquoi "ça mache' dans un k et pas dans l'autre...

--
une bévue

7 réponses

Avatar
Laurent vilday
je sais bien qu'il est préférable d'écrie :

window.onload = setup();


window.onload = setup;

http://groups.google.fr/group/fr.comp.lang.javascript/tree/browse_frm/thread/a2f584d4e6eabce9/8e75d032dab820bb

mais chez moi (???), je suis "obligé" d'utiliser la seconde solution
sinon j'ai une erreur à la console js :

Erreur : document.getElementById("menu_local") has no properties
Fichier source :
file:///Users/yvon/work/CSS/essais/MenuFixe/js/menu.js
Ligne : 4



parce que avec window.onload = setup(); la fonction setup() s'exécute
immédiatement lorsque l'interpréteur passe dessus, hors a ce moment là,
#menu_local n'existe pas donc n'a pas de propriétés.

--
laurent


Avatar
pere.noel
Laurent vilday wrote:

window.onload = setup;


ok, merci, le pire est que je le savais...
--
une bévue

Avatar
ASM
je sais bien qu'il est préférable d'écrie :

window.onload = setup();

que :

<body onload="setup(); return false;">

mais chez moi (???), je suis "obligé" d'utiliser la seconde solution
sinon j'ai une erreur à la console js :

Erreur : document.getElementById("menu_local") has no properties



ça veut dire qu'IE (qui est très spécial dans sa lecture du JS(*) )
ne connait pas déjà ce div !

Ha ? tu as dit 'onload' ? et t'alors ?
(je peux même pas contrôler si le truc existe alors qu'on m'a dit
d'attendre le fin de chargement ? ja fais comme ja veux na!)

je ne vois pas pourquoi "ça mache' dans un k et pas dans l'autre...


Je sais pas non plus, mais si tu fais :

window.onload = function(){
m_local document.getElementById('menu_local').getElementsByTagName('li');
};

que donne-ce ?



ou alors le prendre par surprise ? :

function setup(unId){
m_local document.getElementById(unId).getElementsByTagName('li');
};

window.onload = function() { setup('menu_local'); }

--
ASM


Avatar
ASM

window.onload = setup;


Rhârgh ! j'avions point vu que tu avais répondu.
(tant mieux, d'autant que je n'avais pas vu la coquille)

mais chez moi (???), je suis "obligé" d'utiliser la seconde solution
sinon j'ai une erreur à la console js :


parce que avec window.onload = setup(); la fonction setup() s'exécute
immédiatement lorsque l'interpréteur passe dessus, hors a ce moment là,
#menu_local n'existe pas donc n'a pas de propriétés.


On se fait piéger à tous coups :-(

--
ASM


Avatar
pere.noel
ASM wrote:

Je sais pas non plus, mais si tu fais :

window.onload = function(){


c'est ce qui n'est pas bon ;-)

la syntaxe correcte étant :

window.onload = function;

et là, ça roule...
--
une bévue

Avatar
ASM
ASM wrote:

Je sais pas non plus, mais si tu fais :

window.onload = function(){


c'est ce qui n'est pas bon ;-)


vi, vu.

.


Avatar
Force4
ASM wrote:

Je sais pas non plus, mais si tu fais :

window.onload = function(){


c'est ce qui n'est pas bon ;-)


Si là c'est bon...
Il s'agit ici d'une déclaration et non d'un appel.

Cette syntaxe :
window.onload = function() { blabla; };

est tout aussi juste et fonctionnelle que celle-ci :
function setup() { blabla; }
window.onload = setup;

En revanche effectivement, ici la fonction sera appelée une première
fois (de façon éventuellement non souhaitée suivant le cas) :
function setup() { blabla; }
window.onload = setup();


la syntaxe correcte étant :

window.onload = function;

et là, ça roule...


Cordialement,

--
Force4