OVH Cloud OVH Cloud

Au secours !

12 réponses
Avatar
fred
Bonjour,

ne tombez pas à la renverse en voyant la simplicité de ma question, mais je
n'y arrive vraiment pas...
Dans l'exemple ci-dessous, je ne comprends pas pourquoi ma "fonctionA" n'est
pas appelée au chargement de la page

<body>
<script language="javascript">
function fonctionA() {
alert('fonctionA');
}

function init() {
alert('init');
fonctionA;
}

window.onload = init;
</script>
</body>

Mon objectif initial était d'appeler successivement 2 fonctions au
chargement de la page (une fonction perso "fonctionA" définie dans le "body"
et une fonction d'une librairie externe (fonctionB) déclarée dans un autre
fichier .js). J'avais donc essayé de définir la fonction init:
function init() {
fonctionA;
fonctionB;
}
appelée sur l'événement onload:
window.onload = init;
mais ça ne marche pas... Sauriez-vous comment faire ?

Un grand merci.

Fred.

2 réponses

1 2
Avatar
Florian Sinatra
*Laurent vilday* @ 25/08/2006 16:24 :
*Laurent vilday* @ 25/08/2006 14:12 :
/**
* Loader générique
* @param {object} F Function1 reference
*/
function Loader(F)
{
// index du listener qu'on ajoute
var I = Loader.listeners.length;
Loader.listeners[I] = F;
}
// Listeners
Loader.listeners = [];
là tu ajoutes un objet à une fonction ? c'est une histoire de prototypes

et de constructeur non ?


Non, pas ici. La c'est l'ajout d'une propriété à un objet, une fonction
étant un objet. De la même façon qu'on ajoute une propriété à n'importe
quel objet.


oui, j'ai confondu. j'utilise rarement les objets.

var monObjet = {foo:true, bar:false};
monObjet.foobar = 'texte';

var monInt = 25;
monInt.valid = false;

var monString = 'foobar';
monString.prop = 'foo';


surprenant, et pratique

Les "constructeurs" (existent pas en js) et le prototype permet de créer
des méthodes à l'instance d'un objet.

function maFunc() { alert('init'); }
maFunc.prototype.foo = function()
{
// je suis dans le prototype
alert(this);
};
maFunc.bar = function()
{
// je suis hors du prototype
alert(this);
}

// on instancie l'objet
var instance = new maFunc();

// on appelle la fonction foo() du prototype
instance.foo();

// on appelle la fonction bar() de l'objet
maFunc.bar();

// il est impossible d'appeler bar() depuis l'instance
// cette ligne provoque une erreur d'execution :
// function bar is undefined
instance.bar(); // INTERDIT


je voiiis... merci

// Fonction executée sur le onload
Loader.init = function(evt)
quel est cet argument evt ? où est-il passé à la fonction après ?



lorsque l'on fait window.onload = maFunction, on associe l'évènement
load de l'objet window à la référence maFunction. Lorsque l'évènement
est déclenché par le navigateur, celui-ci fourni un paramètre à la
fonction qui se trouve être la représentation de l'event. Hormis IE,
mais là il faudra voir les archives, on en a déjà pas mal parlé, et
surtout il faut lire ça je pense :
http://www.quirksmode.org/js/events_tradmod.html ainsi que toutes les
pages autour concernant les events.

Ceci dit, mea culpa, j'aurai pas du l'utiliser ici dans "l'exemple". Ca
prête à confusion, désolé, inutile dans cet "exemple".


d'accord

Je préfère la première forme parce que ça évite au navigateur de
"recalculer" la limite maximale à chaque itération de la boucle, mais
c'est pareil en fait, c'est qu'une question de préférence d'écriture. On
a tous nos petites manies de codage :p


du moment que l'on sait que le nombre d'itérations restera raisonnable,
je suis d'avis de privilégier la forme la plus simple. mais le sujet a
déjà largement été débattu ;-)

Et cette fois c'est testé :D
http://mokhet.com/tests/loader.html


merci en tous cas pour ces explications et cette lib, qui me rendra de
fiers services (même si je ne suis pas l'OP) car j'avais demandé la même
chose ici le 13 août et j'ai à présent une version encore plus élégante.

Javascript restera toujours mystérieux pour moi...


Je crois que ce qui est mystérieux, c'est principalement l'idée qu'on
s'en fait et le fait qu'il n'existe pas, à ma connaissance, de
documentation claire en français.

Les différences d'implémentation entre les navigateurs n'aident pas à
démystifier le langage évidemment :D


oui, je suis à l'aise en programmation, c'est bien l'étendue et la
souplesse
du langage, le peu de fonctions natives, ses subtilités et l'absence de
bonne
doc en français qui le rendent si mystérieux à mes yeux. pourtant il
devient
incontournable et permet de faire un tas de trucs.

heureusement il y a quirksmode et developer.mozilla.com. as-tu quelques
URLs supplémentaires en anglais à conseiller ?

Vala, j'espère que c'est un peu plus clair.


ca l'est, merci bcp :-)



Avatar
ASM
*ASM* @ 25/08/2006 16:18 :
function fonctionArgts(x) { alert(x); }

Loader(fonctionArgts('Z'));
Loader(alert('Y'));

Je suppose ?


dans ce cas, ce n'est plus une référence sur la fonction mais sur ce
qu'elle retourne, dans ce cas l'exécution d'une alert, qui est ajoutée
au tableau Loader.listeners, et je doute que ca puisse fonctionner...


En l'état :

En fait ces 2 Loaders s'éxecutent dès leur lecture par le navigateur
(je crois bien au vu de mon test)

Et, en effet, ensuite ça met la zône dans la fonction Loader.init
qui capote au 1er de ces 2 nouveaux faux Loader rencontré lors de sa
boucle for.

--
Stephane Moriaux et son [moins] vieux Mac


1 2