Partage
  • Partager sur Facebook
  • Partager sur Twitter

Appel de methode de classe

Sujet résolu
    6 octobre 2009 à 16:53:35

    Bonjour,

    Je suis en train de realiser un menu dynamique en utilisant pour cela des classes.
    Menu pour toutes les informations globales au menu, Categorie pour les principales categories du menu et SubCategorie une sous classe de Categorie.

    Mon probleme est le suivant:
    J'aimerais appeller une methode de ma classe Categorie lors du survol de cet element.


    function Categorie()
    {
    	this.mouse_over = function()
    	{
    		var elt = document.getElementById("here");
    		elt.style.display = "";
    	}
    	this.mouse_ov = " onMouseOver=\"this.mouse_over()\;\"";
            /* Le this ici fait surement appel a l'element html possedant 
               la regle OnMouseOver */
    }
    


    Ce code ne fonctionne pas, cepedant si je fais une fonction exterieure a la classe et que je l'appel, cela fonctionne.
    Voici le code qui marche


    function mouse_over()
    {
    	var elt = document.getElementById("here");
    	elt.style.display = "";
    }
    
    function Categorie()
    {
    	this.mouse_ov = " onMouseOver=\"mouse_over()\;\"";
    }
    


    Merci pour votre aide
    • Partager sur Facebook
    • Partager sur Twitter
      6 octobre 2009 à 17:35:37

      'god pas très compréhensible.

      Mais tu dois faire :

      tonObject.onmouseover = this.mouse_over;
      
      • Partager sur Facebook
      • Partager sur Twitter
        6 octobre 2009 à 18:04:49

        Merci pour ta reponse, et desole pour la comprehension, n'hesitez pas a demander des explications ;)

        Je n'ai pas tres bien compris comment implementer ce que tu viens de me proposer, voici precisement ce que je fais:
        Mon menu est cree de la facon suivante:

        Categorie1
        Categorie2
        Categorie3
        ...

        Chaque Categorie du tableau est un objet de "classe" Categorie.
        La classe Categorie possede une methode print qui genere un code html en fonction de ses attributs.
        La variable this.mouse_ov permet d'ajouter un evenement lorsque l'utilisateur passe au dessus de la
        categorie qui l'interesse. Cet evenement doit simplement faire appel a la methode mouse_over() de la classe Categorie.

        Voici la classe en entier:

        function Categorie(title, href)
        {
        	this.mouse_over = function()
        	{
        		var elt = document.getElementById("here");
        		elt.style.display = "";
        	}
        	this.bgcolor = '#7B7B7B';
        	this.width = 130;
        	this.style = " style=\"width:" + this.width + "px; background-color:" + bgcolor + ";\"";
        	this.mouse_ov = " onMouseOver=\"this.style.background='"+ this.bgcolor + "'\; " + "mouse_over()\;\"";
        	this.mouse_ou = " onMouseOut=\"this.style.background='" + bgcolor + "'\"";
        	this.sub_cat = new Array();
        	
        	if (title)
        		this.title = title;
        	else
        		this.title = "";
        	
        	if (href)
        		this.href = href;
        	else
        		this.href = "";
        }
        
        Categorie.prototype =
        {
        	print_ : function()
        	{
        		var html = "<tr height=\"" + menu_height + "\"" +  this.style + this.mouse_ov + this.mouse_ou + " align=\"center\"><td>";
        		html += this.title + "</td></tr>";
        		return (html);
        	},
        	
        	add_sub_cat : function(title, href)
        	{
        		this.sub_cat.push(new SubCategorie(title, href));
        	}
        }
        



        J'espere avoir ete plus clair :euh:
        • Partager sur Facebook
        • Partager sur Twitter
          6 octobre 2009 à 19:12:33

          Essaies ça mais bon, c'est mal foutu à la base et la tu dois changer la manière dont tu appelles print :/

          function Categorie(title, href)
          {
          	
          	this.bgcolor = '#7B7B7B';
          	this.width = 130;
          	this.sub_cat = new Array();
          	
          	if (title)
          		this.title = title;
          	else
          		this.title = "";
          	
          	if (href)
          		this.href = href;
          	else
          		this.href = "";
          }
          
          Categorie.prototype =
          {
          	print_ : function()
          	{
          		var tr = document.createElement('tr');
          		var td = document.createElement('td');
          		
          		tr.style.height = menu_height + 'px';
          		tr.style.width = this.width + 'px';
          		tr.style.backgroundColor = bgcolor;
          		var oThis = this;
          		tr.onmouseover = function() {
          			this.style.backgroundColor = oThis.bgcolor;
          			
          			var elt = document.getElementById('here');
          			elt.style.display = '';
          		};
          		
          		tr.onmouseout = function() {
          			this.style.backgroundColor = bgcolor;
          		};
          		
          		tr.align = "center";
          		td.innerHTML = this.title;
          		
          		tr.appendChild(td);
          		
          		return tr;
          	},
          	
          	add_sub_cat : function(title, href)
          	{
          		this.sub_cat.push(new SubCategorie(title, href));
          	}
          }
          
          • Partager sur Facebook
          • Partager sur Twitter
            6 octobre 2009 à 20:14:39

            Merci pour ta reponse, je commence le JS et je ne savais pas qu'on pouvait creer des elements html comme ca, je vais me renseigner et tester, je vous tiens au courrant :D

            ***

            Voila, j'ai fais des recherches sur ce que tu m'as montre ca m'a beaucoup aider, j'ai appris a utiliser les createElement, apres avoir tout recommencer avec cette nouvelle fonction, tout est beaucoup plus clair et tout marche.

            Je voulais donc te remercier ;)
            Merci!

            Pour ceux qui ne savent pas utiliser les createElement, je me suis inspire de la source suivante: http://karma.nucleuscms.org/item/101 , j'espere que ca aidera


            • Partager sur Facebook
            • Partager sur Twitter

            Appel de methode de classe

            × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
            × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
            • Editeur
            • Markdown