Précédent   Forum des professionnels en informatique > Webmasters - Développement Web > JavaScript
JavaScript Forum programmation JavaScript. Lire Cours JavaScript, 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 (permalink)
Membre habitué
 
Avatar de laurentg2003
 
Date d'inscription: janvier 2007
Localisation: gironde
Messages: 151
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 :
// 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 :
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 :
var objBBcode = new classObjectBBcode(null,null,"<?php echo $idimage; ?>");	
    objBBcode.showUpload();
autre question
Si dans ma méthode showUpload
j'ecris un
Code :
return this.tagImage
comment récupérer tagImage ?
avec un code apellant type
Code :
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
Vieux 28/06/2009, 09h47   #2 (permalink)
Responsable Développement Web
 
Avatar de Bovino
 
Date d'inscription: juin 2008
Localisation: Bordeaux
Âge: 39
Messages: 6 708
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 :
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 !
Bovino est déconnecté   Envoyer un message privé Réponse avec citation
Vieux 28/06/2009, 11h00   #3 (permalink)
Membre habitué
 
Avatar de laurentg2003
 
Date d'inscription: janvier 2007
Localisation: gironde
Messages: 151
Envoyer un message via MSN à laurentg2003
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
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
Vieux 28/06/2009, 23h48   #4 (permalink)
Membre habitué
 
Avatar de laurentg2003
 
Date d'inscription: janvier 2007
Localisation: gironde
Messages: 151
Envoyer un message via MSN à laurentg2003
Par défaut

J'ai trouvé la solution un passage de type reference
laurentg2003 est déconnecté   Envoyer un message privé Réponse avec citation
Vieux 29/06/2009, 19h05   #5 (permalink)
Membre habitué
 
Avatar de laurentg2003
 
Date d'inscription: janvier 2007
Localisation: gironde
Messages: 151
Envoyer un message via MSN à laurentg2003
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
laurentg2003 est déconnecté   Envoyer un message privé Réponse avec citation
NEWS JAVASCRIPTF.A.Q JSTUTORIELS JSSOURCES JSLIVRES JS

Réponse Proposer ce sujet en actualité

Précédent   Forum des professionnels en informatique > Webmasters - Développement Web > JavaScript



Outils de la discussion

Règles de messages
Vous ne pouvez pas créer de nouvelles discussions
Vous ne pouvez pas envoyer des réponses
Vous ne pouvez pas envoyer des pièces jointes
Vous ne pouvez pas modifier vos messages

Les balises BB sont activées : oui
Les smileys sont activés : oui
La balise [IMG] est activée : oui
Le code HTML peut être employé : non
Trackbacks are non
Pingbacks are non
Refbacks are non



Fuseau horaire GMT +1. Il est actuellement 05h00.


Vos questions techniques : forum d'entraide JavaScript - Publiez vos articles, tutoriels et cours
et rejoignez-nous dans l'équipe de rédaction du club d'entraide des développeurs francophones
Nous contacter - Hébergement - Participez - Copyright © 2000-2010 www.developpez.com - Legal informations.