Partage
  • Partager sur Facebook
  • Partager sur Twitter

Problème ouverture de lien avec un code Javascript

Sujet résolu
    3 novembre 2010 à 14:37:53

    Bonjour à tous :)

    Je suis en train de créer un petit site en total débutant et je bute sur un petit problème de Javascript...

    J'ai récupérer un menu avec image déroulante en Javascript que j'ai réussi à placer là ou je le voulais, changer les images, ect...mon dernier soucis est que quand je clique sur mes images j'aimerai normalement aller sur une autre page (comme un menu classic) mais pour l'instant ça m'ouvre une sorte de popup avec à l'intérieur l'adresse de la page à laquelle je voudrais aller (a href dans mon html).

    Je ne connais pas du tout le javascript donc j'ai besoin d'aide :)

    Voici le code qu'il faut changer je pense

    /**************************************************************
    
    	Script	: Image Menu
    	Version	: 2.2
    	Authors	: Samuel Birch
    	Desc	: 
    	Licence	: Open Source MIT Licence
    
    **************************************************************/
    
    var ImageMenu = new Class({
    	
    	getOptions: function(){
    		return {
    			onOpen: false,
    			onClose: Class.empty,
    			openWidth: 200,
    			transition: Fx.Transitions.quadOut,
    			duration: 400,
    			open: null,
    			border: 0
    		};
    	},
    
    	initialize: function(elements, options){
    		this.setOptions(this.getOptions(), options);
    		
    		this.elements = $$(elements);
    		
    		this.widths = {};
    		this.widths.closed = this.elements[0].getStyle('width').toInt();
    		this.widths.openSelected = this.options.openWidth;
    		this.widths.openOthers = Math.round(((this.widths.closed*this.elements.length) - (this.widths.openSelected+this.options.border)) / (this.elements.length-1))
    		
    		
    		this.fx = new Fx.Elements(this.elements, {wait: false, duration: this.options.duration, transition: this.options.transition});
    		
    		this.elements.each(function(el,i){
    			el.addEvent('mouseenter', function(e){
    				new Event(e).stop();
    				this.reset(i);
    				
    			}.bind(this));
    			
    			el.addEvent('mouseleave', function(e){
    				new Event(e).stop();
    				this.reset(this.options.open);
    				
    			}.bind(this));
    			
    			var obj = this;
    			
    			el.addEvent('click', function(e){
    
    				if(obj.options.onOpen){
    					new Event(e).stop();
    					if(obj.options.open == i){
    						obj.options.open = null;
    						obj.options.onClose(this.href, i);
    					}else{
    						obj.options.open = i;
    						obj.options.onOpen(this.href, i);
    					}
    					
    					
    				}
    				
    			})
    			
    		}.bind(this));
    		
    		if(this.options.open){
    			if($type(this.options.open) == 'number'){
    				this.reset(this.options.open);
    			}else{
    				this.elements.each(function(el,i){
    					if(el.id == this.options.open){
    						this.reset(i);
    					}
    				},this);
    			}
    		}
    		
    	},
    	
    	reset: function(num){
    		if($type(num) == 'number'){
    			var width = this.widths.openOthers;
    			if(num+1 == this.elements.length){
    				width += this.options.border;
    			}
    		}else{
    			var width = this.widths.closed;
    		}
    		
    		var obj = {};
    		this.elements.each(function(el,i){
    			var w = width;
    			if(i == this.elements.length-1){
    				w = width+5
    			}
    			obj[i] = {'width': w};
    		}.bind(this));
    		
    		if($type(num) == 'number'){
    			obj[num] = {'width': this.widths.openSelected};
    		}
    				
    		this.fx.start(obj);
    	}
    	
    });
    
    ImageMenu.implement(new Options);
    ImageMenu.implement(new Events);
    
    
    /*************************************************************/
    


    Ou peut-être celui là

    window.addEvent('domready', function(){
    				var myMenu = new ImageMenu($$('#menuh a'),{openWidth:310, border:2, onOpen:function(e,i){alert(e);}});
    			});
    


    Si je n'ai pas été clair n'hésitez pas à demander ;)

    Merci d'avance
    • Partager sur Facebook
    • Partager sur Twitter
      3 novembre 2010 à 16:20:30

      var myMenu = new ImageMenu($$('#menuh a'),{openWidth:310, border:2, onOpen:function(e,i){document.location.href =e;}});
      


      devrait faire l'affaire à vue de nez

      *** edit : en lisant le code en diagonale, je dirai que ceci suffirait :

      var myMenu = new ImageMenu($$('#menuh a'),{openWidth:310, border:2 });
      
      • Partager sur Facebook
      • Partager sur Twitter
      L'héroïsme, c'est la seule manière de devenir célèbre quand on a pas de talent.
        3 novembre 2010 à 17:04:38

        Nickel la deuxième solution marche :D

        Mais ça te dérangerait une toute petite explication? En fait tu as supprimer la fonction qui faisait ouvrir une autre page?

        En tout cas merci je passe en résolu
        • Partager sur Facebook
        • Partager sur Twitter
          3 novembre 2010 à 17:33:11

          if(obj.options.onOpen){
          					new Event(e).stop();
          					if(obj.options.open == i){
          						obj.options.open = null;
          						obj.options.onClose(this.href, i);
          					}else{
          						obj.options.open = i;
          						obj.options.onOpen(this.href, i);
          					}
          					
          					
          				}
          


          Si l'option onOpen est définie et !=false, on s'arrête :

          new Event(e).stop();
          


          et t'appellesla fonction :

          obj.options.onOpen(this.href, i)
          


          Qui correspondait à

          function(e,i){alert(e);}
          


          D'où ton alerte. SI tu définis pas onOpen ou si tu mets onOpen:false -> comportement par défaut et suivi de ton lien.

          Voilà c'est à peu près tout ;)
          • Partager sur Facebook
          • Partager sur Twitter
          L'héroïsme, c'est la seule manière de devenir célèbre quand on a pas de talent.

          Problème ouverture de lien avec un code Javascript

          × 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