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 :

Déclaration de variable


Sujet :

JavaScript

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2002
    Messages
    121
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2002
    Messages : 121
    Par défaut Déclaration de variable
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    ...		<script type="text/javascript" src="../js/movable_window.js"></script>
    		<script type="text/javascript" src="../js/form-management.js"></script>...
    Dans le movable_window, j'ai au tout début la déclaration d'un objet dont la déclaration est juste au dessus
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    	var g_oMovableWindowManager = new MovableWindow();
    Dans le second script, je tente d'appeler mon objet g_oMovableWindowManager sans succès (Erreur*: g_oMovableWindowManager.addMovableWindow is not a function)
    Pourtant, lorsque je déclare l'objet juste au dessus de l'appel de mon fonction, cela fonctionne très bien.
    Cela aurait-il un rapport avec la portée globale des variables non prise en compte dans ce type de fonction ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    var form_management=
    {	
    	addLinkForm: function(parentObj, sTitle)
    	{
    ...
    		// var g_oMovableWindowManager = new MovableWindow();
    		// Fonctionne si je décommente la ligne ci dessus
    		g_oMovableWindowManager.addMovableWindow(parentObj, "addLink-Form", sTitle, iWidth);
    ...

  2. #2
    Membre chevronné
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    313
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2009
    Messages : 313
    Par défaut
    Oops...

    Le code de ta classe MovableWindow STP.

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2002
    Messages
    121
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2002
    Messages : 121
    Par défaut
    Voilà
    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
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
     
    	function MovableWindow()
    	{	
    		var mouse_x;
    		var mouse_y;
    		var windowPreviousX;
    		var windowPreviousY;
    		var bIsDragging = false;
    		var dragDropCounter = -1;
     
    		MovableWindow.prototype = 
    		{
    			onMouseUp: function(e)
    			{
    				this.bIsDragging = false;
    				this.dragDropCounter = -1;
    			}
    			,
    			onMouseOverHeader: function(e,obj)
    			{
     
    			}
    			,
    			onMouseOutHeader: function(e,obj)
    			{
    				//this.bIsDragging = false;
    			}
    			,
    			onMouseMove: function(e)
    			{
    				if (!this.mouse_x
    				|| !this.mouse_y
    				|| !this.bIsDragging)
    					return;
    				if(document.all)e = event;
    				var leftPos = e.clientX;
    				if(this.dragDropCounter<10)return;
     
    				var topPos = e.clientY + document.documentElement.scrollTop;
    				var dragObject;
    				if (e.target) dragObject = e.target.parentNode;
    					else if (e.srcElement) dragObject = e.srcElement.parentNode;
    					if (source.nodeType == 3)
    						dragObject = dragObject.parentNode;
     
    				//alert(e.clientX  + ' - ' +  this.mouse_x + ' - ' + this.windowPreviousX);
    				var ePosX = (e.clientX - this.mouse_x + this.windowPreviousX);
    				var ePosY = (e.clientY - this.mouse_y + this.windowPreviousY + document.documentElement.scrollTop);
    				if (ePosX < 0)
    					ePosX = 0;
    				if (ePosY < 0)
    					ePosY = 0;	
    				dragObject.style.left =  ePosX + 'px';
    				dragObject.style.top =  ePosY + 'px';
     
    				this.mouse_x = e.clientX;
    				this.mouse_y = e.clientY;
     
    				this.windowPreviousX = ePosX;
    				this.windowPreviousY = ePosY;
     
    				this.dragDropCounter = 0;
    				//alert(ePosX + " - " + ePosY);
    			}
    			,
    			plop: function()
    			{
    				alert("toto");
    				if(this.dragDropCounter>=0 && this.dragDropCounter<10){
    					this.dragDropCounter++;
    					setTimeout('plop()',10);
    					return;
    				}
    				if(this.dragDropCounter==10){
    					//mouseoutBoxHeader(false,dragObject);
    				}			
    			}
    			,
    			onMouseInitDrag: function(e)
    			{
    				this.dragDropCounter = 1;
    				if(document.all)e = event;
     
    				if (e.target) source = e.target.parentNode;
    					else if (e.srcElement) source = e.srcElement.parentNode;
    					if (source.nodeType == 3)
    						source = source.parentNode;
     
    				if(source.tagName.toLowerCase()=='img'
    				|| source.tagName.toLowerCase()=='a'
    				|| source.tagName.toLowerCase()=='input'
    				|| source.tagName.toLowerCase()=='td'
    				|| source.tagName.toLowerCase()=='tr'
    				|| source.tagName.toLowerCase()=='table')
    					return;
     
    				this.mouse_x = e.clientX;
    				this.mouse_y = e.clientY;
     
    				this.windowPreviousX = getLeftPos(source);
    				this.windowPreviousY = getTopPos(source);
     
    				this.bIsDragging = true;
     
    				this.dragDropCounter = 0;
    				g_oMovableWindowManager.plop();
     
    				return false;
    			}
    			,
    			addBoxHeader: function(parentObj, sId, sTitle, iWidth)
    			{
    				var div = document.createElement('DIV');
    				div.className = sId + '-Header';
     
    				div.id = sId + '-Header';;
    				div.onmouseover 	= this.onMouseOverHeader;
    				div.onmouseout 		=  this.onMouseOutHeader;
    				div.onmousemove 	= this.onMouseMove;
    				div.onmousedown 	= this.onMouseInitDrag;
    				div.onmouseup 		= this.onMouseUp;
     
    				div.setAttribute("style", "background-color : #404080;");
    				div.style.display 	= 'none';
    				div.style.cursor 	= 'move';
    				div.style.width		= iWidth + "px";
    				div.style.height	= "50px";
     
    				var textSpan = document.createElement('SPAN');
    				textSpan.id = sId + '-Header-txt';
    				textSpan.innerHTML = sTitle;
    				div.appendChild(textSpan);
     
    				parentObj.appendChild(div);	
    				return div;
    			}
    			,
    			addMovableWindow: function (parentObj, sId, sTitle, iWidth)
    			{
    				return this.addBoxHeader(parentObj,  sId, sTitle, iWidth);
    			}
    		}
    	}
     
    	var g_oMovableWindowManager = new MovableWindow();

  4. #4
    Membre Expert
    Avatar de RomainVALERI
    Homme Profil pro
    POOête
    Inscrit en
    Avril 2008
    Messages
    2 652
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : POOête

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 652
    Par défaut
    >>> la fonction en question est la seule de ton objet à avoir une signature comportant un espace entre le mot-clef function et les parenthèses de paramètres...
    N'étant pas (je veux dire : pas encore ) un expert en js, et ayant toujours "collé" ces deux éléments dans mes propres sources, je me suis dit : sait-on jamais ? ^^

    à vérifier éventuellement, donc.

  5. #5
    Membre chevronné
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    313
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2009
    Messages : 313
    Par défaut
    Première chose :
    var mouse_x;
    var mouse_y;
    var windowPreviousX;
    var windowPreviousY;
    var bIsDragging = false;
    var dragDropCounter = -1;


    this.mouse_x
    et pas var mouse_x
    Pareil pour les autres

  6. #6
    Membre chevronné
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    313
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2009
    Messages : 313
    Par défaut
    Ensuite, je ne m'avancerais pas si d'inclure le prototypage dans une classe fonctionne, mais en le sortant de l'objet, j'ai pu introspecter tous ses membres.
    Dans le cas contraire, non.

    Conclusion, j'ai modifier tes 'var' en 'this.'
    Sortie le prototypage de l'objet, et ça roule.

  7. #7
    Membre chevronné
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    313
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2009
    Messages : 313
    Par défaut
    Ca fonctionne sous cette forme sous FF :

    function Test () {
    this.coucou = 'coucou';
    prototype : {
    akeu: { alert(this.coucou) }
    }
    }

    var T = new Test();
    T.akeu();
    Ré-écriture de prototype en JSON. Sinon, même avec this.prototype ça ne passe pas.

Discussions similaires

  1. déclaration de variable public
    Par mathieu57 dans le forum MFC
    Réponses: 5
    Dernier message: 15/09/2005, 17h36
  2. [DB2] Ordre de déclaration des variables
    Par Fatah93 dans le forum DB2
    Réponses: 1
    Dernier message: 04/05/2005, 17h18
  3. déclaration de variables de 16, 32 et 128 bits
    Par samipate dans le forum C++
    Réponses: 10
    Dernier message: 30/12/2004, 22h33
  4. [FLASH MX2004] Déclaration de variables sous flash mx
    Par softyClochette dans le forum Flash
    Réponses: 4
    Dernier message: 29/11/2004, 16h11
  5. [debutant][Portée] Déclaration de variable .....
    Par Slein dans le forum Langage
    Réponses: 4
    Dernier message: 07/05/2004, 10h43

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