IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

JavaScript Discussion :

Syntaxe des declarations de fonction


Sujet :

JavaScript

  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    211
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 211
    Points : 196
    Points
    196
    Par défaut Syntaxe des declarations de fonction
    Bonjour,

    J'ai modifié une application existante en chargeant tout le code JavaScript dynamiquement, au lieu de le charger directement dans le HEAD de mon document HTML.
    Cela veut dire que au lieu d'avoir mes fonctions définies dans mon document principal, elles le sont par le biais d'appels AJAX ayant lieu une fois la page principale chargée.

    Pour ce faire, j'ai du changer toutes mes déclarations de fonction de ce type de syntaxe:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    function myFunction(){
    alert('test'); 
    }
    a celui-ci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    myFunction = function(){
    alert('test'); 
    };
    Cela semblait bien fonctionner avec toutes les fonctions que j'utilise, mis a part TinyMCE que je dois encore charger dans le document principal.

    Mais depuis que j'ai fait ca, j'ai commencé a remarquer des comportement étranges, dans le sens que certaines fonctions semblent en conflit avec d'autres. Par exemple, le click sur un élément 'draggable' va s'appliquer, mais sur un autre élément, lui aussi 'draggable'.

    Ce qui est étrange, c'est que la seule chose que j'ai modifiée, c'est cette syntaxe de fonction, mais en aucun cas leur contenu.

    Je me demande donc si la forme syntaxique a une implication sur l'éxécution des fonctions, et vous demande donc si vous connaissez la différence

    Merci d'avance!

    Thomas

  2. #2
    Expert confirmé
    Avatar de le_chomeur
    Profil pro
    Développeur informatique
    Inscrit en
    Février 2006
    Messages
    3 653
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Février 2006
    Messages : 3 653
    Points : 4 835
    Points
    4 835
    Par défaut
    vérifis qu'il n'y ai pas plusieurs id identiques

  3. #3
    Membre habitué
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    211
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 211
    Points : 196
    Points
    196
    Par défaut
    Merci mais j'ai bien vérifié ca, et ces fonctions, si elles sont toutes chargées dans le HEAD n'entrainent pas ce type de conflit, or elles l'entraineraient de la meme facon en étant déclarées dans le HEAD qu'en étant chargées apres-coup.

    En revanche, j'ai de nombreuses variables dans ces fonctions qui ont des noms similaires. Mais elles sont déclarées séparément dans chaque fonction et en utilisant 'var'...

    Une autre idée?

  4. #4
    Rédacteur/Modérateur

    Avatar de SpaceFrog
    Homme Profil pro
    Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Inscrit en
    Mars 2002
    Messages
    39 640
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2002
    Messages : 39 640
    Points : 66 665
    Points
    66 665
    Billets dans le blog
    1
    Par défaut
    il faut faire une nouvelle instance à chaque utilisation


  5. #5
    Membre habitué
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    211
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 211
    Points : 196
    Points
    196
    Par défaut
    Peux-tu etre un tout petit peu plus explicite? Si j'appelle une fonction de cette facon-la:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    myFunction = function(){
    alert('test');
    }
    Il faut ensuite que je l'appelle en utilisant 'new'? C'est lié a sa syntaxe de construction?

    Ca parait logique et je vais essayer.

    Cependant, est-ce que dois faire pareil pour une fonction qui ne génere pas de code HTML? Je ne crois pas... Par exemple, ma fonction qui vérifie les formulaires, je ne crois pas avoir besoin de l'appeler avec new.
    Peux-tu préciser stp dans quel cas tu dois employer 'new'?

    Merci beaucoup, ca sent effectivement le début de solution!

  6. #6
    Rédacteur/Modérateur

    Avatar de SpaceFrog
    Homme Profil pro
    Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Inscrit en
    Mars 2002
    Messages
    39 640
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2002
    Messages : 39 640
    Points : 66 665
    Points
    66 665
    Billets dans le blog
    1
    Par défaut
    le fait d'appeler une focntion avec new permet d'en créer une nouvelle instance séparée ce qui evite à javascript de s'emmeler les crayons entre les variables ayant le même nom.

  7. #7
    Membre habitué
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    211
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 211
    Points : 196
    Points
    196
    Par défaut
    Ok, merci... Je vais essayer ca ce soir, et posterai ce que ca a donné.

  8. #8
    Membre habitué
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    211
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 211
    Points : 196
    Points
    196
    Par défaut
    Ben non... Ca n'a rien changé

  9. #9
    Rédacteur/Modérateur

    Avatar de SpaceFrog
    Homme Profil pro
    Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Inscrit en
    Mars 2002
    Messages
    39 640
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2002
    Messages : 39 640
    Points : 66 665
    Points
    66 665
    Billets dans le blog
    1
    Par défaut
    c'est que javascript mélange les fonctions ...

    essaye de faire un push dans un array pour différentier les appels ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    var TabFunctions= new Array()
     
    TabFunction.push(myfunction())

  10. #10
    Rédacteur
    Avatar de marcha
    Homme Profil pro
    Développeur Web
    Inscrit en
    Décembre 2003
    Messages
    1 571
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Décembre 2003
    Messages : 1 571
    Points : 2 351
    Points
    2 351
    Par défaut
    Citation Envoyé par nabab Voir le message
    Cela veut dire que au lieu d'avoir mes fonctions définies dans mon document principal, elles le sont par le biais d'appels AJAX ayant lieu une fois la page principale chargée.
    Salut,

    Tu peux donner le code de chargement que tu utilises ?

  11. #11
    Membre habitué
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    211
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 211
    Points : 196
    Points
    196
    Par défaut
    Désolé je n'étais pas en ligne hier, et je n'ai pas le code avec moi.

    Merci SpaceFrog, je vais essayer ca ce soir, et je posterai le code par la meme occasion.

  12. #12
    Membre habitué
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    211
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 211
    Points : 196
    Points
    196
    Par défaut
    Salut et désolé pour la réponse tardive, j'ai eu pas mal de problemes a regler - j'en ai encore - avec IE6...

    Spacefrog, je t'ai envoyé les codes de connection si tu veux jeter un oeil...
    En fait je ne suis pas certain de voir ce que tu veux dire:
    essaye de faire un push dans un array pour différentier les appels ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    var TabFunctions= new Array()
     TabFunction.push(myfunction())
    Pour ce qui est de la fonction qui charge tous les differents JS, c'est une fonction Ajax toute simple:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    38
    39
    40
    41
    42
    43
    44
    45
     
    bbnjs_exe_ajax = function(bbnjs_ele,bbnjs_file,bbn_js1,bbn_js2,bbn_js3,bbn_js4,bbn_js5,bbn_js6,bbn_js7){
    	var myajax = new bbnjs_ajax_object();
    	myajax.open("POST", "/execute.php", true);
    	myajax.onreadystatechange = function(){
    		if (myajax.readyState == 4 && myajax.status == 200){
    			if ( document.getElementById(bbnjs_ele) ){
    				document.getElementById(bbnjs_ele).innerHTML = myajax.responseText;
    				if ( bbnjs_count_links ){
    					bbnjs_count_links();
    				}
    			}
    			else{
    				eval(myajax.responseText);
    			}
    		}
    	}
    	var parameters = 'bbnjs_file=' + bbnjs_file;
    	if (bbnjs_ele){
    		parameters += '&bbnjs_ele=' + bbnjs_ele;
    	}
    	if (bbn_js1){
    		parameters += '&bbn_js1=' + bbn_js1;
    	}
    	if (bbn_js2){
    		parameters += '&bbn_js2=' + bbn_js2;
    	}
    	if (bbn_js3){
    		parameters += '&bbn_js3=' + bbn_js3;
    	}
    	if (bbn_js4){
    		parameters += '&bbn_js4=' + bbn_js4;
    	}
    	if (bbn_js5){
    		parameters += '&bbn_js5=' + bbn_js5;
    	}
    	if (bbn_js6){
    		parameters += '&bbn_js6=' + bbn_js6;
    	}
    	if (bbn_js7){
    		parameters += '&bbn_js7=' + bbn_js7;
    	}
    	myajax.setRequestHeader('Content-Type','application/x-www-form-urlencoded');
    	myajax.send(parameters);
    }
    Elle est exécutée au chargement de la page, et rappelle automatiquement la meme fonction:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    setTimeout("bbnjs_exe_ajax('','load',3);",200);
    une dizaine de fois jusqu'a ce que tous les scripts soient chargés.
    Les fichiers appelés sont de simples JS - générés par PHP.

    Jusqu'a présent, je n'ai pas pu charger de cette maniere:
    - la librairie X
    - tinyMCE
    - mon menu CSS (car sinon le tweak avec csshover.htc pour IE6 ne fonctionne pas)

    Merci!

  13. #13
    Rédacteur/Modérateur

    Avatar de SpaceFrog
    Homme Profil pro
    Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Inscrit en
    Mars 2002
    Messages
    39 640
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2002
    Messages : 39 640
    Points : 66 665
    Points
    66 665
    Billets dans le blog
    1
    Par défaut
    de multiples ajax simultanés ...

    j'ai peur que ça ne se passe pas bien ...

    il vaut mieux faire un open et des send multiples quoi que je pense quil faille mieux collecter tous les paramètres et faire un seul send ...

  14. #14
    Expert confirmé
    Avatar de le_chomeur
    Profil pro
    Développeur informatique
    Inscrit en
    Février 2006
    Messages
    3 653
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Février 2006
    Messages : 3 653
    Points : 4 835
    Points
    4 835
    Par défaut
    je dis peut-être une bêtise mais en créer un objet , qui s'occupe d'envoyer les requête et de les récupérer
    on instancie plusieurs objets ?

  15. #15
    Rédacteur/Modérateur

    Avatar de SpaceFrog
    Homme Profil pro
    Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Inscrit en
    Mars 2002
    Messages
    39 640
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2002
    Messages : 39 640
    Points : 66 665
    Points
    66 665
    Billets dans le blog
    1
    Par défaut
    Je ne sais même pas auteur, je ne connais pas les capacités de mulithreadage d'ajax ...
    Je ne sais pas si il saura différentier les retours ???
    Je n'ai jamais eu le temps de tester,
    j'ai toujours par defaut groupé les paramètres et par dessus fait du synchrone ...

  16. #16
    Expert confirmé
    Avatar de le_chomeur
    Profil pro
    Développeur informatique
    Inscrit en
    Février 2006
    Messages
    3 653
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Février 2006
    Messages : 3 653
    Points : 4 835
    Points
    4 835
    Par défaut
    a tester mais je pense que oui puisque chaque processus , est indépendant ( en théorie )

  17. #17
    Rédacteur/Modérateur

    Avatar de SpaceFrog
    Homme Profil pro
    Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Inscrit en
    Mars 2002
    Messages
    39 640
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2002
    Messages : 39 640
    Points : 66 665
    Points
    66 665
    Billets dans le blog
    1
    Par défaut
    d'accord Fillot mais au niveau de l'adressage en retour de la reponse ... ???
    Je ne parierias pas ...

  18. #18
    Membre habitué
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    211
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 211
    Points : 196
    Points
    196
    Par défaut
    Il semble qu'il différencie tres bien les retours: j'ai parfois des actions qui entrainent plusieurs appels en meme temps, et l'évaluation des resposeText se fait sans probleme.
    Par contre, concernant le chargement des fonctions sur la page principale, les appels ne sont pas faits simultanement, mais les uns a la suite des autres, l'éxécution de l'un ne commencant que 0.2 secondes apres la fin d'exécution de l'autre (c'est l'exécution du responseText qui se termine par l'appel de la fonction suivante).

    Par contre, le_chomeur, je ne comprends pas ce que tu veux dire par:
    je dis peut-être une bêtise mais en créer un objet , qui s'occupe d'envoyer les requête et de les récupérer
    on instancie plusieurs objets ?
    Une autre question (subsidiaire): savez-vous si je peux charger une feuille de style renvoyant vers le fameux hack de IE6 (csshover.htc) apres que le document soit chargé (un moyen simple de vérifier est d'essayer je sais.

    Merci de vos réponses en tout cas

  19. #19
    Expert confirmé
    Avatar de le_chomeur
    Profil pro
    Développeur informatique
    Inscrit en
    Février 2006
    Messages
    3 653
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Février 2006
    Messages : 3 653
    Points : 4 835
    Points
    4 835
    Par défaut
    Citation Envoyé par nabab Voir le message

    Par contre, le_chomeur, je ne comprends pas ce que tu veux dire par: ...
    tu créer un objet :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    function toto(){
     
    var testAjax = function (){
    ici tes méthodes ...
    }
     
    this.testAjax();
    }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    premier =  new toto();
    second = new toto();
    pour allez plus loin dans le test il suffirait d'ajouter un paramère a une requète sql en s'arrangeant pour que la première sois plus longue a s'exécuter que la seconde , et vérifier l'ordre et la bonne valeur de retour via des alert() ...

    je sais que mon exemple est assez succinct mais j'ai pas mal de boulot , mais voila tu as les grandes lignes

  20. #20
    Membre habitué
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    211
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 211
    Points : 196
    Points
    196
    Par défaut
    Donc tu ne chomes pas

    Ton exemple est assez clair, je vais essayer ca, merci!

Discussions similaires

  1. Syntaxe des fonctions
    Par Caius Suelburnus dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 14/01/2011, 16h57
  2. [Débutant] la syntaxe de declaration d'une fonction,et comment faire l'appel de fonction.
    Par jeune informatique dans le forum MATLAB
    Réponses: 2
    Dernier message: 03/06/2010, 15h53
  3. Aide sur syntaxe des fonctions
    Par Lo² dans le forum PostgreSQL
    Réponses: 2
    Dernier message: 08/07/2009, 20h04
  4. sélection des bd en fonction des utilisateurs (pg_hba.conf)
    Par Bouboubou dans le forum PostgreSQL
    Réponses: 9
    Dernier message: 18/03/2004, 18h34
  5. Declaration de fonction retournant un pointeur sur fonction
    Par pseudokifaitladifférence dans le forum C
    Réponses: 5
    Dernier message: 11/08/2003, 19h37

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo