Précédent   Forum des professionnels en informatique > Webmasters - Développement Web > JavaScript
JavaScript Forum programmation JavaScript. Lire : Cours JavaScript, FAQ JavaScript, Toutes les FAQ JavaScript et Sources JavaScript
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
Vieux 27/06/2009, 22h13   #1
Membre habitué
 
Inscription : janvier 2007
Messages : 220
Détails du profil
Informations personnelles :
Localisation : France, Gironde (Aquitaine)

Informations forums :
Inscription : janvier 2007
Messages : 220
Points : 115
Points : 115
Envoyer un message via MSN à laurentg2003
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 :
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 :
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 :
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 :
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
laurentg2003 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/06/2009, 09h47   #2
Responsable Développement Web

 
Avatar de Bovino
 
Homme Didier Mouronval
Développeur Web
Inscription : juin 2008
Messages : 12 876
Détails du profil
Informations personnelles :
Nom : Homme Didier Mouronval
Âge : 41
Localisation : France, Gironde (Aquitaine)

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

Informations forums :
Inscription : juin 2008
Messages : 12 876
Points : 30 135
Points : 30 135
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 :
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 !
Vous possédez un blog et aimeriez diffuser vos billets sur le forum, 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
Bovino est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/06/2009, 11h00   #3
Membre habitué
 
Inscription : janvier 2007
Messages : 220
Détails du profil
Informations personnelles :
Localisation : France, Gironde (Aquitaine)

Informations forums :
Inscription : janvier 2007
Messages : 220
Points : 115
Points : 115
Envoyer un message via MSN à laurentg2003
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
Citation:
classObjectBBcode.prototype.showUpload=function(){im1.onclick=function() {return tagImage}}
et je voudrais récupérer tagImage
comme ceci
Citation:
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.

Dernière modification par laurentg2003 ; 28/06/2009 à 11h22.
laurentg2003 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/06/2009, 23h48   #4
Membre habitué
 
Inscription : janvier 2007
Messages : 220
Détails du profil
Informations personnelles :
Localisation : France, Gironde (Aquitaine)

Informations forums :
Inscription : janvier 2007
Messages : 220
Points : 115
Points : 115
Envoyer un message via MSN à laurentg2003
J'ai trouvé la solution un passage de type reference
laurentg2003 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/06/2009, 19h05   #5
Membre habitué
 
Inscription : janvier 2007
Messages : 220
Détails du profil
Informations personnelles :
Localisation : France, Gironde (Aquitaine)

Informations forums :
Inscription : janvier 2007
Messages : 220
Points : 115
Points : 115
Envoyer un message via MSN à laurentg2003
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
laurentg2003 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +1. Il est actuellement 12h12.


 
 
 
 
Partenaires

Hébergement Web