Une piste ?
Code:
1
2
3
4
5 <script type='text/javascript'> tabfunks= new Array( function one(){alert('one')} , function two(){alert(arguments[0])} ) if(tabfunks[1] instanceof Function) {tabfunks[1]('rrt')} </script>
Version imprimable
Une piste ?
Code:
1
2
3
4
5 <script type='text/javascript'> tabfunks= new Array( function one(){alert('one')} , function two(){alert(arguments[0])} ) if(tabfunks[1] instanceof Function) {tabfunks[1]('rrt')} </script>
ouep jte suis mais l'erreur est ailleurs je crois...car là où j'en suis le script fait 0*2-1....d'où plantage...je cherche à empêcher son exécution car le DIV qu'il tente de créer est de taille égale au champ qui se trouve être masqué suyr la page où je me trouve. Donc mm si il est accessible son offsetWidth lui ne l'est pas!
_Champs c'est quoi ? il est instancié au moment du init ?
alert(_Champs) te retourne quoi ?
Yahouu j'ai trouvé! Je comprends ceci en moralité:
Lorqu'un objet de formulaire (texte en l'occurence) est masqué car se trouvant dans un div ayant pour propriété css (display:none), cet objet est reconnu par JS en tant que [Object] mais par contre ses spécificités de taille comme son offsetWidth ne le sont plus!! D'où un offsetWidth que j'avais à 0 et d'où un calcul basé sur un multiplication par 0 d'oùùùù plantaaage ahahahaha!!
Bon maintenant je reviens vers toi spacy concernant le passage des paramètres...car j'en ai besoin!
mmmhhhh je sentais bien un souci d'instanciation...
c'est quoi ton souci de paramètres ?
et bien maintenant le soucis, c'est qu'il faut que je passe les paramètres à l'initAutocomplete histoire que tout soit optimisé....car là tous les paramètres sont en durs dans la fonction (form, champ, adresse script php)
ben reprend mon bout de code précédent avec arguments...
J'ai lu ton bout de code mais je vois pas coment m'en servir. Car j'ai déjà le tableau de fonctions.
tu me fais une reacap du souci ?
VOICI LE CHARGEUR DE FONCTIONS POUR LE WINDOW.ONLOAD
dans le cas d'un passage de paramètres..cela ne fonctionne pas.Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26 function addToStart(fnc){ if(!window.listStart) window.listStart = new Array(); window.listStart.push(fnc) } function start(){ var ls = window.listStart; // ls est le tableau qui contient toutes les fonctions if(ls){ for(i=0; i<ls.length; i++){ fnc = ls[i]; if (fnc instanceof Function){ // dans le cas ou la fonction n'a pas de paramètres, l'appel se faisant de cette manière addToStart(ma_fonction); fnc(); } else { // dans le cas ou la fonction a des paramètres, l'appel se faisant de cette manière addToStart("initAutoComplete('arg1','arg2','arg3');") mes arguments étant des chaînes; window[fnc+'()']; } } } } function initAutoComplete (arg1,arg2,arg3) {...}
le teste function est inutile ...Code:
1
2
3 tabfunks= new Array( function one(){alert('one')} , function two(){alert(arguments[0])}, function three(arg1,arg2,arg3){alert(arg1+arg3+arg3)} ) for (i=0;i<tabfunks.length;i++){if(tabfunks[i] instanceof Function) {tabfunks[i]('vo','i','la')} }
a quel moment passes tu les params ?
là je suis chez moi en pause déjeuner (c'est tard je sais)....je re dans une heure et je m'y replonge
Je crois qu'on s'est compliqué l'existance :
Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 <script type='text/javascript'> listStart= new Array() function initAutoComplete (arg1,arg2,arg3) {alert(arg1+arg2+arg3)} function addToStart(fnc){ listStart[listStart.length]=fnc } addToStart(initAutoComplete(1,2,3)) addToStart(initAutoComplete(5,7,3)) addToStart(initAutoComplete('mon père',' ma mère',' mes frères et mes soeurs')) for (i=0;i<listStart.length;i++){if(listStart[i] instanceof Function) {tabfunks[i]}} </script>
je récapitule ton code :
???Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 listStart= new Array() function addToStart(fnc){ listStart[listStart.length]=fnc } function start(){ for (i=0;i<listStart.length;i++) { if(listStart[i] instanceof Function) { tabfunks[i]; } } }
Je sais pas si tu as compris que ce chargeur à la base de différencier les fonctions avec et/ou sans paramètres. si?
Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22 <script type='text/javascript'> listStart= new Array() function initAutoComplete (arg1,arg2,arg3) {alert(arg1+arg2+arg3)} function noargs(){alert('pas de paramètre')} function addToStart(fnc){ listStart[listStart.length]=fnc } addToStart('initAutoComplete(1,2,3)') addToStart('initAutoComplete(5,7,3)') addToStart("initAutoComplete('mon père',' ma mère',' mes frères et mes soeurs')") addToStart("noargs()") for (i=0;i<listStart.length;i++){if(listStart[i] instanceof Function) {} else {if(listStart[i].split('\(')[1].length==1){alert(listStart[i] + ' pas de paramètres')}} } </script>
ouep je te suis bien seulement:
n'entre pas dans cette condition :Code:addToStart("initAutoComplete('mon père',' ma mère',' mes frères et mes soeurs')")
Code:{if(listStart[i] instanceof Function) {}
oui mais le problmème est que quand tu fais:
en fait il lance la fonction à ce moment là ...Code:addToStart(initAutoComplete('mon père',' ma mère',' mes frères et mes soeurs'))
a aucun moemnt je me verifie le instanceof Function ... :(
tu es sur de pouvoir mettre une fonction dans l'array ?
sûr non.
Vu que ce n'est pas mon code.
Mais je suis sûr de pouvoir le faire fonctionner avec ou sans paramètres dans les fonctions! ^^
C'est tout good! merci pour ton code SpaceF!
Voilà le résultat final (commenté pour tous) qui fonctionne:
Et ça roule...faut bien penser à mettre des guillements et à utiliser eval() dans le cas de passage de paramètres. Mais ya surement moyen de pauffiner tout ça!Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31 // on initialise un tableau global accessible partout listStart= new Array() ; // Fonction qui stocke en tableau les fonctions que l'on veut exécuter au chargement d'une page function addToStart(fnc){ listStart[listStart.length]=fnc; // on rempli le tableau global pour chaque fonction } /* ex d'appels: addToStart(ma_fonction1); addToStart("ma_fonction2('param1','param2','param3')"); attention : notez les guillemets dans le cas de passage de paramètres */ // Le démarreur que l'ont met en bas de la page avant le </body> // window.onload = start; // et le contenu de la fonction start function start(){ for (i=0;i<listStart.length;i++){ // s'il fonction sans paramètres alors éxécution notez les (); if(listStart[i] instanceof Function) {listStart[i]();} // sinon on a une chaine de caractère ("") et on se sert de eval() pour faire l'exécution else { eval (listStart[i]); } } } }
Heu j'arrive pas à faire marcher ton truc ...Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37 </head> <script type='text/javascript'> // on initialise un tableau global accessible partout listStart= new Array() ; // Fonction qui stocke en tableau les fonctions que l'on veut exécuter au chargement d'une page function addToStart(fnc){ listStart[listStart.length]=fnc; // on rempli le tableau global pour chaque fonction } /* ex : addToStart(charge_pre); ou :addToStart("initAutoComplete('param1','param2','param3')"); !! : notez les guillemets dans le cas de passage de paramètres */ // Le démarreur que l'ont met en bas de la page avant le </body> // window.onload = start; // et le contenu de la fonction start function start(){ for (i=0;i<listStart.length;i++){ // s'il s'agit d'une fonction sans paramètres on éxécute la fonction sur laquelle on se trouve dans le tableau if(listStart[i] instanceof Function) { listStart[i](); } // sinon nous sommes en présence d'une chaine de caractères que l'ont peut exécuter comme une fonction avec eval() else { eval (listStart[i]); } }//end boucle for }//end function function one(){alert('one')} function two(xx){alert(xx)} addToStart(one) </script> <body onlaod='start()'> </body> </html>