11548 sujets

JavaScript, DOM et API Web HTML5

Slt tlm,

je voudrais savoir s'il est possible de passer un argument au fonction que l'on exécute sur une "window.onload". C'est a dire, faire quelque chose du style:

window.onload = maFonction("Argument1",Argument2);


Car pour l'instant, a chaque fois que j'ai testé, ca ne marchait pas, et pour contourner le problème je dois faire une fonction d'initialisation:

function init(){
maFonction("Argument1",Argument2);
}

window.onload = init;



Merci bp!
+++
Modifié par maxroucool (26 Oct 2007 - 18:10)
Une autre question qui n'a pas trop de rapport avec la précédente.

Comment fait-on pour donner une valeur par défaut à un argument d'une fonction.

Je sais que en PHP c'est simple, il suffit de faire:
function maFonction( $Argument1, $Argument2 = 0){ ... }


Ainsi si j'appelle maFonction sans renseigner de deuxième argument, alors celui-ci aura pour valeur "0".


Merci bp!
+++
1 - Pas possible, il faut effectivement que tu passes par une fonction supplémentaire. Tu n'as pas d'autre choix que :

window.onload = function(){
fonction2(argument1, argument2, ...);
}


2 - Les valeurs par défaut de paramètres de fonction n'existent pas en javascript en tant que tels. Mais on peut les "simuler" :

Solution 1 : Passer par le tableau arguments

function mafunc () {
var arg1 = arguments[0];
var arg2 = (arguments.length>1? arguments[1] : 0);
alert(arg1);
alert(arg2);
}

On n'indique pas le nombre de paramètres qu'attend la fonction, et on utilise le tableau arguments pour y accéder. Ce qui permet d'avoir une fonction à nombre et types de paramètres modulables. On peut aller bien plus loin que la simulation de valeurs par défaut, on peut accepter des listes de paramètres totalement différentes et changer les traitements effectués dans la fonction selon le type et le nombre des paramètres fournis.

Solution 2 : Tester les paramètres

function mafunc (arg1, arg2) {
if (typeof(arg2)=="undefined") arg2=0;
alert(arg1);
alert(arg2);
}

Dans cette solution-ci, la fonction prend officiellement deux arguments, en principe obligatoires.
Cependant tu remarqueras que seul le premier est vraiment obligatoire, le second étant facultatif et remplacé automatiquement par 0 s'il a été omis grâce au test if (typeof(arg2)=="undefined").


Je trouve la solution 1 plus élégante, mais c'est une question de goût je pense.
Slt,

J'ai encore une question a ce sujet, la dernière fois j'ai téléchargé l'API de yahoo, et j'ai vu qu'ils exécutaient des fonctions en donnant comme arguments des espèces de tableaux situés entre accolades.

Exemple:
var anim = new YAHOO.util.Anim('demo', {width:500,height:500}, 0.5, YAHOO.util.Easing.backOut);


Je voudrais donc voulu savoir comment ca marchait.
maxroucool a écrit :
j'ai vu qu'ils exécutaient des fonctions en donnant comme arguments des espèces de tableaux situés entre accolades.
C'est une notation litérale d'un objet (associatif). Ces 3 notations sont identiques :

var myObject = new Object();
myObject.width = 500;
myObject.height = 500;

var myObject = new Object();
myObject['width'] = 500;
myObject['height'] = 500;

var myObject = {
  width: 500,
  height: 500
};
Cette dernière notation fait d'ailleurs l'objet d'une spécification: JSON pour JavaScript Object Notation: un site qu'il est cool
Modifié par Ze Nenex (01 Nov 2007 - 14:32)
Ze Nenex a écrit :
C'est une notation litérale d'un objet (associatif). Ces 3 notations sont identiques :

var myObject = new Object();
myObject.width = 500;
myObject.height = 500;

var myObject = new Object();
myObject['width'] = 500;
myObject['height'] = 500;

var myObject = {
  width: 500,
  height: 500
};
Cette dernière notation fait d'ailleurs l'objet d'une spécification: JSON pour JavaScript Object Notation: un site qu'il est cool
new Object(), s'écrit aussi {}, tout simplement.

Sinon, Json n'a rien à voir avec la representation litérale d'une hashmap, Json est un format de données

QuentinC a écrit :
A un détail près sauf erreur : les guillemets autour de width et de height

Il ne sont pas necessaires tant que la clée ne comporte pas d'espace ou de tiret
Merci Ze nenex, tu m'en apprends encore et la syntaxe
var myObject2 = {width: 700,height: 500};
me plait bien.
Par contre

myObject['width'] = 500;
sans guillemets ne fonctionne pas.
Je n'ai pas de message d'erreur sur IE, mais Opera m'indique :
Reference to undefined variable: width
a écrit :
Il ne sont pas necessaires tant que la clée ne comporte pas d'espace ou de tiret

Tu m'apprends quelque chose là... je pensais qu'ils étaient interprétés comme des variables dans ce cas-là.
QuentinC a écrit :
Il ne sont pas necessaires tant que la clée ne comporte pas d'espace ou de tiret

Tu m'apprends quelque chose là... je pensais qu'ils étaient interprétés comme des variables dans ce cas-là.
shinuza ne parlais pas du truc entre crochet,
dans le cas de windows['pouet'] on doit obligatoirement mettre des ''
mais en JSON quand tu ecris ton objet ;

{
pouet : 'truc',
blabla : 'machin',
'pouet truc machin' : 'encore un autre truc'
}
seul les clés avec des espaces ou autres bizarreries alphabetiques doivent avoir obligatoirement des guillemets