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 :

portée d'une variable dans une fonction dans une méthode


Sujet :

JavaScript

  1. #1
    Membre actif
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    327
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Janvier 2007
    Messages : 327
    Points : 204
    Points
    204
    Par défaut portée d'une variable dans une fonction dans une méthode
    Bonjour,
    Mon probléme est un probléme de portée d'une variable.
    mon code
    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
    // classe qui manipule l'objet bbcode  insertion d'image ,de liens dans le contenu et autre
    // le constructeur de l'objet de type classObjectBBcode
    function classObjectBBcode(imageTag,lienTag,idImage){
     
     
    this.imageTag=imageTag;
    this.lienTag = lienTag;
    this.idImage=idImage ;
     
     
     
    }
     
    //méthode qui affiche un formulaire d'upload et qui créé un tag qui sera 
    //inséré via une autre méthode dans le contenu d'un textarea
    classObjectBBcode.prototype.showUpload=function(){
     
     
    var im1 = document.images[0]; 
    im1.onclick=function() { 
    var div = document.getElementById("showUpload");
    div.style.display = 'block';
    var contenu = document.forms[4].elements[3].value;
    var reg = new RegExp("\[img [0-9]+\]","g");
    var tags=contenu.match(reg);
     
     
    var tagImage = "[img "+this.idImage+"]";
    Le soucis vient de l'attibut this.idImage
    si un alert l'affiche dans la méthode showUpload
    il reste undefined dans ma fonction anonyme.
    une histoire de portée visiblement.même si j'ai résolu le probléme
    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
    function classObjectBBcode(imageTag,lienTag,idImageF){
     
     
    this.imageTag=imageTag;
    this.lienTag = lienTag;
    idImage=idImageF ;
     
     
     
    }
     
     
    classObjectBBcode.prototype.showUpload=function(){
     
     
    var im1 = document.images[0]; 
    im1.onclick=function() { 
    var div = document.getElementById("showUpload");
    div.style.display = 'block';
    var contenu = document.forms[4].elements[3].value;
    var reg = new RegExp("\[img [0-9]+\]","g");
    var tags=contenu.match(reg);
     
     
    var tagImage = "[img "+idImage+"]";//résultat à retourner passer en param à l'appelle de smiley
    idImage devient une variable globale mais ce n'est plus un attribut d'objet
    exist il un moyen de récuperer cet atribut sous la forme this.idImage dans ma fonction contenue dans la méthode et qui s'éxécute aprés un click sur une image ? faire qyue le 1er code fonctionne ?
    Voici le code appelant
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    var objBBcode = new classObjectBBcode(null,null,"<?php echo $idimage; ?>");	
        objBBcode.showUpload();
    autre question
    Si dans ma méthode showUpload
    j'ecris un comment récupérer tagImage ?
    avec un code apellant type
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    var objBBcode = new classObjectBBcode(null,null,"<?php echo $idimage; ?>");	
        var varreturn=objBBcode.showUpload(); 
    var divTest = document.getElementById("test");
        divTest.innerHTML=varreturn;
    	</script>
     
     
    <div id='test'></div>
    ne renvoit rien
    merci de m'aider

  2. #2
    Rédacteur

    Avatar de Bovino
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2008
    Messages
    23 647
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2008
    Messages : 23 647
    Points : 91 220
    Points
    91 220
    Billets dans le blog
    20
    Par défaut
    Pour ta première question, dans ta fonction anonyme, le this ne correspond plus au même objet.
    Une solution est de passer par une variable intermédiaire (souvent appelée that) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    classObjectBBcode.prototype.showUpload=function(){
     
    var that = this;
    var im1 = document.images[0]; 
    im1.onclick=function() { 
    var div = document.getElementById("showUpload");
    div.style.display = 'block';
    var contenu = document.forms[4].elements[3].value;
    var reg = new RegExp("\[img [0-9]+\]","g");
    var tags=contenu.match(reg);
     
     
    var tagImage = "[img "+that.idImage+"]";
    Pour la seconde question, tout dépend de où tu mets le return. Si c'est dans la fonction anonyme, alors c'est elle qui va renvoyer le résultat à sa fonction appelante qui elle ne renverra rien du tout
    Pas de question technique par MP !
    Tout le monde peut participer à developpez.com, vous avez une idée, contactez-moi !
    Mes formations video2brain : La formation complète sur JavaScriptJavaScript et le DOM par la pratiquePHP 5 et MySQL : les fondamentaux
    Mon livre sur jQuery
    Module Firefox / Chrome d'intégration de JSFiddle et CodePen sur le forum

  3. #3
    Membre actif
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    327
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Janvier 2007
    Messages : 327
    Points : 204
    Points
    204
    Par défaut
    Bonjour
    Alors là je dis bravo
    C'est trés bon merci beaucoup
    en fait ,javascript simule la notion d'orienté objet en tout cas tel qu'elle existe en java ou C#
    Mais je ne veux rien qui rappelle le procédural

    Merci bien

    autre question
    dans une methode j'ai ma fonction anomyme
    classObjectBBcode.prototype.showUpload=function(){im1.onclick=function() {return tagImage}}
    et je voudrais récupérer tagImage
    comme ceci
    var objBBcode = new classObjectBBcode(null,null,"<?php echo $idimage; ?>");
    var varreturn=objBBcode.showUpload();
    varrereturn contient tagImage
    Or comme remarqué justement j'appelle la méthode pas la fonction anonyme
    qui ne s'appelle pas
    puis je en faire une fonction nominative et l'appellé
    la solution semble d'en faire un attibut de la classe et donc de l'instance de l'objet peut etre
    le but avec la variable ainsi récupérée via l'appel de la fonction est d'appeller une autre méthode qui elle va véritablement insérer ce tag dans un textarea.

  4. #4
    Membre actif
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    327
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Janvier 2007
    Messages : 327
    Points : 204
    Points
    204
    Par défaut
    J'ai trouvé la solution un passage de type reference

  5. #5
    Membre actif
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    327
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Janvier 2007
    Messages : 327
    Points : 204
    Points
    204
    Par défaut
    Re moi
    les variables globales c 'est bien jolie
    mais comment appeller une methode d'instance ou une methode statique
    en lui passant des parametres sans créer un attribut
    mon parametre est une variable
    Je peux créer une fonction classique
    function ma_finction(){} ret l'appeller dans une méthode
    mais je ne veux pas je voudrais appeller une methode en lui passant des parametres

    Merci

Discussions similaires

  1. [PHP 5.4] récupérer la valeur d'une variable qui se trouve dans un fonction
    Par aspkiddy dans le forum Langage
    Réponses: 2
    Dernier message: 11/02/2014, 17h06
  2. Réponses: 2
    Dernier message: 24/09/2010, 20h28
  3. Réponses: 9
    Dernier message: 05/11/2008, 09h37
  4. Réponses: 7
    Dernier message: 13/03/2006, 15h39
  5. Réponses: 4
    Dernier message: 05/10/2005, 18h19

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