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 :

Optimisation fonction, 1 pour le prix de 2


Sujet :

JavaScript

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé Avatar de mensoif
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    248
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 248
    Par défaut Optimisation fonction, 1 pour le prix de 2
    Bonjour z'a tous !

    je cherche à introduire dans ma page un mécanisme de mode (normal, avancé) avec comme mode par défault (première visite de la page) à normal. Puis en fonction du "clic" sur l'un des boutons, afficher le contenu lié à ce mode.

    En gros, en mode normal, j'ai un div particulier qui s'affiche, idem en mode avancé.

    Pour ce faire, j'ai écris deux fonctions l'une permettant l'affichage du mode avance et l'autre normal. Elles ont le corps suivant :

    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
     
    function Affich_normal () {
        var ObjToAffich = document.getElementById ('normal_mode');
    	var ObjToCache  = document.getElementById ('avance_mode');
    	if (ObjToAffich) {
    	    ObjToAffich.style.display = "block";
    	}
    	if (ObjToCache) {
    	    ObjToCache.style.display = "none";
    	}
    }
     
    function Affich_avance () {
    	var ObjToAffich = document.getElementById ('avance_mode');
    	var ObjToCache  = document.getElementById ('normal_mode');
    	if (ObjToAffich) {
    	    ObjToAffich.style.display = "block";
    	}
    	if (ObjToCache) {
    	    ObjToCache.style.display = "none";
    	}
    }
    Ce qui vous permez de remarquer que le corps est horriblement proche (deux variables sont swappé).

    J'ai donc voulus écrire une seul fonction qui pourrait jouer ce même rôle,
    soit montrer le bloc d'id 1 ( premier arg) et cacher le 2.
    J'aurais ainsi simplement à intervertir l'ordre des id.

    J'ai donc écris le code suivant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    function Affich (enable, disable) {
     
    	var show_frm = document.getElementById (enable);
    	var hide_frm = document.getElementById (disable);
     
    	if (show_frm) {
    		show_frm.style.display = "block";
    	}
    	if (hide_frm) {
    		hide_frm.style.display = "none";
    	}	
     
    }
    Malheureusement, l'effet escompter n'est pas là. Lorsque je fais mes appels de la façon suivante :

    <a href="#" onclick="Affich('normal_mode', 'avance_mode')" alt="Mode_normal">Normal</a>
    <a href="#" onclick="Affich('avance_mode','normal_mode')" alt="Mode_avance">Avanc&eacute;</a>
    Pour avoir un comportement se rapprochant de ce que je veux il faut que j'intervertisse le second appel à Affich par Affich_avance ();

    Si quelqu'un pouvait m'éclairer =)

    petite précision css, j'ai mon block d'id normal_mode en display : block et mon block d'id avance_mode en display : none; ( ce qui correspond à mon affichage par défaut).

  2. #2
    Expert confirmé
    Avatar de le_chomeur
    Profil pro
    Développeur informatique
    Inscrit en
    Février 2006
    Messages
    3 653
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Février 2006
    Messages : 3 653
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    function Affich_avance(doIt) {
    	var avance = document.getElementById ('avance_mode');
    	var normal  = document.getElementById ('normal_mode');
     
    	    avance.style.display = (doIt) ? "block":"none";
    	    normal.style.display = (!doIt) ? "block":"none";
    }

    ??

    doIt vaudra true ou false

  3. #3
    Membre éclairé Avatar de mensoif
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    248
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 248
    Par défaut
    Zehr gut, l'objectif est atteint!

    Cependant, je n'ai toujours pas saisie le pourquoi qui fait que ma fonction "Affich(disable, enable)" ne fonctionnait pas. Aurais-tu une petite idée avant que je ne mette le poste comme Résolu ?

  4. #4
    Expert confirmé
    Avatar de le_chomeur
    Profil pro
    Développeur informatique
    Inscrit en
    Février 2006
    Messages
    3 653
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Février 2006
    Messages : 3 653
    Par défaut
    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
    function Affich (enable, disable) {
    	//Enabled vaudra l'id souhaité
     
    	var show_frm = document.getElementById (enable); //Récupération de l'id souhaité a voir
    	var hide_frm = document.getElementById (disable);
     
    //On test si l'élément existe
    	if (show_frm) {
    //Si oui on l'affiche
    		show_frm.style.display = "block";
    	}
    //Test si l'élément existe
    	if (hide_frm) {
    //Si oui on le masque
    		hide_frm.style.display = "none";
    	}	
     
    }

  5. #5
    Membre éclairé Avatar de mensoif
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    248
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 248
    Par défaut
    Oui c'est bien de cette fonction que je parle, mais je ne vois pas pourquoi tu as fait un copier coller ? :o

    Si tu n'as pas d'idée du dysfonctionnement ce n'est pas grave..

  6. #6
    Rédacteur
    Avatar de bigboomshakala
    Homme Profil pro
    Consultant Web .NET
    Inscrit en
    Avril 2004
    Messages
    2 077
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Consultant Web .NET
    Secteur : Finance

    Informations forums :
    Inscription : Avril 2004
    Messages : 2 077
    Par défaut
    Citation Envoyé par mensoif Voir le message
    Oui c'est bien de cette fonction que je parle, mais je ne vois pas pourquoi tu as fait un copier coller ? :o

    Si tu n'as pas d'idée du dysfonctionnement ce n'est pas grave..
    les commentaires qui ont été ajouté dans le code sont là pour t'aider à comprendre...

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 4
    Dernier message: 26/03/2014, 15h47
  2. Fonction objectif pour optimisation de la correspondance visuelle
    Par ERCO503 dans le forum Traitement d'images
    Réponses: 0
    Dernier message: 19/06/2013, 21h38
  3. fonction min pour un vecteur (optimisation)
    Par MicBeastKiller dans le forum MATLAB
    Réponses: 8
    Dernier message: 23/09/2010, 11h58
  4. Fonction/méthode pour obtenir l'IP de la machine
    Par sirex007 dans le forum Web & réseau
    Réponses: 3
    Dernier message: 10/04/2003, 14h36
  5. Réponses: 3
    Dernier message: 02/09/2002, 18h49

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