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 :

Raccourcir un script qui fonctionne


Sujet :

JavaScript

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2010
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Juin 2010
    Messages : 11
    Points : 6
    Points
    6
    Par défaut Raccourcir un script qui fonctionne
    Bonjour tous le monde !

    Je début en javascript est je voudrai si possible raccoursir la taille de mon code.
    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
     
    // Affichage de la page connecxion.php
    function affConnecxion() {
    	if ( a == true ) {
    		document.getElementById("titre").style.display="none" ;
    		document.getElementById("sujet").style.display="none" ;
    		document.getElementById("connecxion").style.display="block" ;
    		document.getElementById("boutDeco").style.display="block";
    		document.getElementById("boutCo").style.display="none";
    		document.getElementById("ouvrage").style.display="none" ;
    		a = false ;
    		b = true ;
    		c = true ;
    		} else {
    			document.getElementById("connecxion").style.display="none" ;
    			document.getElementById("ouvrage").style.display="none" ;
    			document.getElementById("sujet").style.display="none" ;
    			document.getElementById("titre").style.display="block" ;
    			a = true ;
    			b = true ;
    			c = true ;
    		}
    }
     
    // Affichage de la page sujet.html
    function affSujet() {
    	if ( b == true ) {
    		document.getElementById("titre").style.display="none" ;
    		document.getElementById("sujet").style.display="block" ;
    		document.getElementById("connecxion").style.display="none" ;
    		document.getElementById("ouvrage").style.display="none" ;
    		document.getElementById("boutCo").style.display="block";
    		document.getElementById("boutDeco").style.display="none";
    		a = true ;
    		b = false ;
    		c = true ;
    		} else {
    			document.getElementById("connecxion").style.display="none" ;
    			document.getElementById("ouvrage").style.display="none" ;
    			document.getElementById("sujet").style.display="none" ;
    			document.getElementById("titre").style.display="block" ;
    			a = true ;
    			b = true ;
    			c = true ;
    		}
    }
     
    // Afficher la liste des ouvrages
    function affOuv() {
    	if ( c == true ) {
    		document.getElementById("titre").style.display="none" ;
    		document.getElementById("sujet").style.display="none" ;
    		document.getElementById("connecxion").style.display="none" ;
    		document.getElementById("ouvrage").style.display="block" ;
    		document.getElementById("boutCo").style.display="block";
    		document.getElementById("boutDeco").style.display="none";
    		a = true ;
    		b = true ;
    		c = false ;
    		} else {
    			document.getElementById("connecxion").style.display="none" ;
    			document.getElementById("ouvrage").style.display="none" ;
    			document.getElementById("sujet").style.display="none" ;
    			document.getElementById("titre").style.display="block" ;
    			a = true ;
    			b = true ;
    			c = true ;
    		}
    }
     
    // Fonction event
    function addEvent(elt,evt,fct) {
    	if (document.addEventListener) {
    		elt.addEventListener(evt,fct,false);
    		} else {
    			elt.attachEvent('on'+evt,fct);
    			}
    }
     
    // Affichage de la page sujet.html
    function init(){
    	document.getElementById("titre").style.display="block" ;
    	document.getElementById("sujet").style.display="none" ;
    	document.getElementById("connecxion").style.display="none" ;
    	document.getElementById("ouvrage").style.display="none" ;
    		document.getElementById("boutCo").style.display="block";
    		document.getElementById("boutDeco").style.display="none";
    	a = true ;
    	b = true ;
    	c = true ;
    }
    Voila ma question je voudrai savoir si il me serai pas plus simple de recuperai la valeur de l'id du bouton sur le quel je clic et changer juste la valeur du display en question ?

    Merci pour vos réponces
    bpascal91

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

    Informations professionnelles :
    Activité : POOête

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 652
    Points : 4 164
    Points
    4 164
    Par défaut
    Fais-toi une petite fonction pour factoriser tous ces appels ^^
    Code javascript : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    function display(elems, etat) {
        for (var i = 0, iMax = elems.length; i < iMax; ++i)
            document.getElementById(elems[i]).style.display = etat;
    }
    qui te permet de remplacer par exemple ceci :

    avant
    Code javascript : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    		document.getElementById("titre").style.display="none" ;
    		document.getElementById("sujet").style.display="block" ;
    		document.getElementById("connecxion").style.display="none" ;
    		document.getElementById("ouvrage").style.display="none" ;
    		document.getElementById("boutCo").style.display="block";
    		document.getElementById("boutDeco").style.display="none";
    après
    Code javascript : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    display(["sujet", "boutCo"], "block");
    display(["titre", "connecxion", "ouvrage", "boutDeco"], "none");

  3. #3
    Rédacteur/Modérateur

    Avatar de SpaceFrog
    Homme Profil pro
    Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Inscrit en
    Mars 2002
    Messages
    39 640
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2002
    Messages : 39 640
    Points : 66 665
    Points
    66 665
    Billets dans le blog
    1
    Par défaut
    mauvais choix de nom de fonction ?

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

    Informations professionnelles :
    Activité : POOête

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 652
    Points : 4 164
    Points
    4 164
    Par défaut
    Citation Envoyé par SpaceFrog Voir le message
    mauvais choix de nom de fonction ?
    Pour connecxion ? Ca m'a frappé aussi au début mais la faute est partout ^^

    Autre chose au fait si tu veux raccourcir ton code :
    avant
    Code javascript : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    a = true;
    b = true;
    c = true;
    après
    Code javascript : Sélectionner tout - Visualiser dans une fenêtre à part
    a = b = c = true;
    ^^

    Et aussi :
    avant
    Code javascript : Sélectionner tout - Visualiser dans une fenêtre à part
    if (a == true) ...
    après(s'il s'agit de booléens comme ici, car dans certains autres cas de figure ça peut être plus complexe)

  5. #5
    Futur Membre du Club
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2010
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Juin 2010
    Messages : 11
    Points : 6
    Points
    6
    Par défaut
    ok merci je vais mettre tout ca en pratique de suite ...

    Je dois louper quelque chose ou pas bien le faire
    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
    Code JS :
    var a = b = c = true ;
    // Fonction des menu
    function affMenu(elems, etat) {
    	for (var i = 0, iMax = elems.length; i < iMax; i++)
    		document.getElementById(elems[i]).style.display = etat;
    		display(["sujet", "boutonCo"], "block");
    		display(["titre", "connecxion", "ouvrage", "boutonDeco"], "none");
    }
     
    // Affichage de la page connecxion.php
    function affConnecxion() {
    	if ( a == true ) {
    		document.getElementById("titre").style.display="none" ;
    		document.getElementById("sujet").style.display="none" ;
    		document.getElementById("connecxion").style.display="block" ;
    		document.getElementById("boutDeco").style.display="block";
    		document.getElementById("boutCo").style.display="none";
    		document.getElementById("ouvrage").style.display="none" ;
    		a = false ;
    		b = c = true ;
    		} else {
    			document.getElementById("connecxion").style.display="none" ;
    			document.getElementById("ouvrage").style.display="none" ;
    			document.getElementById("sujet").style.display="none" ;
    			document.getElementById("titre").style.display="block" ;
    			a = b = c = true ;
    		}
    }
     
    // Affichage de la page sujet.html
    function affSujet() {
    	if ( b == true ) {
    		document.getElementById("titre").style.display="none" ;
    		document.getElementById("sujet").style.display="block" ;
    		document.getElementById("connecxion").style.display="none" ;
    		document.getElementById("ouvrage").style.display="none" ;
    		document.getElementById("boutCo").style.display="block";
    		document.getElementById("boutDeco").style.display="none";
    		a = c = true ;
    		b = false ;
    		} else {
    			document.getElementById("connecxion").style.display="none" ;
    			document.getElementById("ouvrage").style.display="none" ;
    			document.getElementById("sujet").style.display="none" ;
    			document.getElementById("titre").style.display="block" ;
    			a = b = c = true ;
    		}
    }
     
    // Afficher la liste des ouvrages
    function affOuv() {
    	if ( c == true ) {
    		document.getElementById("titre").style.display="none" ;
    		document.getElementById("sujet").style.display="none" ;
    		document.getElementById("connecxion").style.display="none" ;
    		document.getElementById("ouvrage").style.display="block" ;
    		document.getElementById("boutCo").style.display="block";
    		document.getElementById("boutDeco").style.display="none";
    		a = b = true ;
    		c = false ;
    		} else {
    			document.getElementById("connecxion").style.display="none" ;
    			document.getElementById("ouvrage").style.display="none" ;
    			document.getElementById("sujet").style.display="none" ;
    			document.getElementById("titre").style.display="block" ;
    			a = b = c = true ;
    		}
    }
     
    // Fonction event
    function addEvent(elt,evt,fct) {
    	if (document.addEventListener) {
    		elt.addEventListener(evt,fct,false);
    		} else {
    			elt.attachEvent('on'+evt,fct);
    			}
    }
     
    // Affichage de la page sujet.html
    function init(){
    	document.getElementById("titre").style.display="block" ;
    	document.getElementById("sujet").style.display="none" ;
    	document.getElementById("connecxion").style.display="none" ;
    	document.getElementById("ouvrage").style.display="none" ;
    	document.getElementById("boutCo").style.display="block";
    	document.getElementById("boutDeco").style.display="none";
    	a = b = c = true ;
    }
     
    // appel de fonction init 
    addEvent(window, 'load', init);
    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
    code html :
    <div id="MV" class="MenuVert">
    <p>
    	<?php
    		require_once('fonctionPHP.php') ;
    		Bonjour('') ; 
    	?>
        <br />
        <ul>
            <li><a id="btaccueil" href="#" onClick="init()">Accueil</a></li>
            <li><a id="btsujet" href="#" onClick="affMenu("sujet", "block")">Sujet</a></li>
        </ul>
        <br />
        <ul>
            <li><a id="btouvrage" href="#" onClick="affOuv()">Liste des ouvrages</a></li>
        	<li><a id="btrecherche" href="#" onClick="affOuv()">Recherche</a></li>
        </ul>
        <br />
     
    </div>
    J'ai tester que sur le bouton sujet est ca marche pas mes div son dans d'autre page

  6. #6
    Membre expérimenté Avatar de Willpower
    Homme Profil pro
    sans emploi
    Inscrit en
    Décembre 2010
    Messages
    1 009
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : sans emploi

    Informations forums :
    Inscription : Décembre 2010
    Messages : 1 009
    Points : 1 519
    Points
    1 519
    Par défaut


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    function display(elems, etat) {
        for (var i = 0, iMax = elems.length; i < iMax; ++i)
            document.getElementById(elems[i]).style.display = etat;
    }
    function affMenu() {
        display(["sujet", "boutonCo"], "block");
        display(["titre", "connecxion", "ouvrage", "boutonDeco"], "none");
    }

  7. #7
    Rédacteur/Modérateur

    Avatar de SpaceFrog
    Homme Profil pro
    Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Inscrit en
    Mars 2002
    Messages
    39 640
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2002
    Messages : 39 640
    Points : 66 665
    Points
    66 665
    Billets dans le blog
    1
    Par défaut
    non display est un mot "reservé" de style
    y'a risque de conflit...

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

    Informations professionnelles :
    Activité : POOête

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 652
    Points : 4 164
    Points
    4 164
    Par défaut
    Equivalent à ton extrait de départ (mais on est encore loin d'avoir tout optimisé hein ^^ c'est juste le plus gros)
    Code javascript : 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
    // Affichage de la page connecxion.php
    function affConnecxion() {
    	if (a) {
    		disp(["connecxion", "boutDeco"], "block");
    		disp(["titre", "sujet", "boutCo", "ouvrage"], "none");
    		a = false;
    	} else {
    		disp(["titre"], "block");
    		disp(["connecxion", "ouvrage", "sujet"], "none");
    	}
    	b = c = true;
    }
     
    // Affichage de la page sujet.html
    function affSujet() {
    	if (b) {
    		disp(["sujet", "boutCo"], "block");
    		disp(["titre", "connecxion", "ouvrage", "boutDeco"], "none");
    		b = false;
    	} else {
    		disp(["titre"], "block");
    		disp(["connecxion", "ouvrage", "sujet"], "none");
    	}
    	a = c = true;
    }
     
    // Afficher la liste des ouvrages
    function affOuv() {
    	if (c) {
    		disp(["ouvrage", "boutCo"], "block");
    		disp(["titre", "sujet", "connecxion", "boutDeco"], "none");
    		c = false;
    	} else {
    		disp(["titre"], "block");
    		disp(["connecxion", "ouvrage", "sujet"], "none");
    	}
    	a = b = true;
    }
     
    // Fonction event
    function addEvent(elt,evt,fct) {
    	if (document.addEventListener) {
    		elt.addEventListener(evt,fct,false);
    		} else {
    			elt.attachEvent('on'+evt,fct);
    			}
    }
     
    // Affichage de la page sujet.html
    function init(){
    	display(["titre", "boutCo"], "block");
    	display(["sujet", "connecxion", "ouvrage", "boutDeco"], "none");
    	a = b = c = true;
    }
     
    function disp(elems, etat) {
        for (var i = 0, iMax = elems.length; i < iMax; ++i)
            document.getElementById(elems[i]).style.display = etat;
    }
    ...et j'ai pris en compte la remarque de Spaffy sur le nom display aussi ^^

  9. #9
    Membre expérimenté Avatar de Willpower
    Homme Profil pro
    sans emploi
    Inscrit en
    Décembre 2010
    Messages
    1 009
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : sans emploi

    Informations forums :
    Inscription : Décembre 2010
    Messages : 1 009
    Points : 1 519
    Points
    1 519
    Par défaut
    Citation Envoyé par SpaceFrog Voir le message
    non display est un mot "reservé" de style
    y'a risque de conflit...
    t'es sûr de ça ? car en programmation la notion de polymorphisme dit justement que plusieurs méthodes peuvent posséder le même nom et seront appelées distinctement selon leurs contexte, ici l'objet "style" ou "window".


    je ne suis pas certain de que j'avance donc corrige-moi si je me trompe.

  10. #10
    Futur Membre du Club
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2010
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Juin 2010
    Messages : 11
    Points : 6
    Points
    6
    Par défaut
    Merci beaucoup pour l'aide que vous m'avais apporter !
    Personnellement j'étais pas parti sur cette voie là
    J'ai encore augmenter mes connaissance

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

    Informations professionnelles :
    Activité : POOête

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 652
    Points : 4 164
    Points
    4 164
    Par défaut
    Citation Envoyé par Willpower Voir le message
    t'es sûr de ça ? car en programmation la notion de polymorphisme dit justement que plusieurs méthodes peuvent posséder le même nom et seront appelées distinctement selon leurs contexte, ici l'objet "style" ou "window".


    je ne suis pas certain de que j'avance donc corrige-moi si je me trompe.
    +1 ^^

    Mais j'ai pas osé contredire le boss ...et puis ça ne pouvait pas faire de mal de raccourcir le nom de la fonction...

  12. #12
    Futur Membre du Club
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2010
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Juin 2010
    Messages : 11
    Points : 6
    Points
    6
    Par défaut
    Petite question qui a son importance
    si la personne qui vien voir le site n'a pas javascript activer plus rien ne fonctionne donc voila ma question :
    et-il possible de faire la meme chose en php ?
    Merci pour les reponces

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

    Informations professionnelles :
    Activité : POOête

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 652
    Points : 4 164
    Points
    4 164
    Par défaut
    En rechargeant la page à chaque action de l'utilisateur, oui.

  14. #14
    Rédacteur/Modérateur

    Avatar de SpaceFrog
    Homme Profil pro
    Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Inscrit en
    Mars 2002
    Messages
    39 640
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2002
    Messages : 39 640
    Points : 66 665
    Points
    66 665
    Billets dans le blog
    1
    Par défaut
    pour ce qui est des conflits de nommage entre types différents j'ai eu tellement de surprises, ne serait-ce que par exemple avec des boutons submit nommés submit
    submit => fonction
    submit => objet

    Désormais je ne cherche pas les embrouilles je proscris l'utilisation de noms conflictuels.

  15. #15
    Rédacteur

    Avatar de Bovino
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2008
    Messages
    23 647
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2008
    Messages : 23 647
    Points : 91 220
    Points
    91 220
    Billets dans le blog
    20
    Par défaut
    +1 Spaffy

    Autre cas d'école, imaginons le code suivant
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    var objJS = document.body;
    function display(){
    alert('Fonction display');
    }
    with(objJS.style){
        var foireux = display;
        display();
    }
    C'est pas top
    Bon, d'accord, c'est capillotracté, mais quand même...

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

    Informations professionnelles :
    Activité : POOête

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 652
    Points : 4 164
    Points
    4 164
    Par défaut
    Citation Envoyé par Bovino Voir le message
    Bon, d'accord, c'est capillotracté, mais quand même...
    ben voilà maintenant j'ai mal aux cheveux...

    (with ? sérieusement ? )(j'ai jamais aimé ce "raccourci", mais je suis d'accord que c'est une réaction un peu irrationnelle )

  17. #17
    Membre expérimenté Avatar de Willpower
    Homme Profil pro
    sans emploi
    Inscrit en
    Décembre 2010
    Messages
    1 009
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : sans emploi

    Informations forums :
    Inscription : Décembre 2010
    Messages : 1 009
    Points : 1 519
    Points
    1 519
    Par défaut
    Citation Envoyé par Bovino Voir le message
    +1 Spaffy

    Autre cas d'école, imaginons le code suivant
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    var objJS = document.body;
    function display(){
    alert('Fonction display');
    }
    with(objJS.style){
        var foireux = display;
        display();
    }
    C'est pas top
    Bon, d'accord, c'est capillotracté, mais quand même...
    oui et non !

    parce que si tu forces le contexte "document.body.style" au lieu de "window", le programmeur doit savoir à quoi il s'en tient !

    d'ailleurs pour bien faire et être sûr d'éviter ce genre d'erreurs, tous les appels devraient se faire sur les objets auxquels ils se rapportent :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    window.display();
    window.alert();

  18. #18
    Rédacteur

    Avatar de Bovino
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2008
    Messages
    23 647
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2008
    Messages : 23 647
    Points : 91 220
    Points
    91 220
    Billets dans le blog
    20
    Par défaut
    Ah non

    with ne modifie pas le contexte, il l'enrichit :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    var objJS = document.body;
    function display(){
    alert('Fonction display');
    }
    with(objJS.style){
        var foireux = display;
        alert('toto');
        display();
    }
    D'autre part, l'objet window est implicite, il n'est donc pas nécessaire de le préciser.

    Mais pour en revenir à
    plusieurs méthodes peuvent posséder le même nom et seront appelées distinctement selon leurs contexte
    tu as raison, mais ça reste selon moi maladroit, c'est pour cela que je préconise d'éviter des nommages pouvant porter à confusion voire à conflit

  19. #19
    Membre expérimenté Avatar de Willpower
    Homme Profil pro
    sans emploi
    Inscrit en
    Décembre 2010
    Messages
    1 009
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : sans emploi

    Informations forums :
    Inscription : Décembre 2010
    Messages : 1 009
    Points : 1 519
    Points
    1 519
    Par défaut
    Citation Envoyé par Bovino Voir le message
    with ne modifie pas le contexte, il l'enrichit :
    effectivement.

    Citation Envoyé par Bovino Voir le message
    D'autre part, l'objet window est implicite, il n'est donc pas nécessaire de le préciser.
    je sais, c'est justement pour ça que je disais :
    "pour bien faire et être sûr d'éviter ce genre d'erreurs, tous les appels devraient se faire sur les objets auxquels ils se rapportent"


    Citation Envoyé par Bovino Voir le message
    tu as raison, mais ça reste selon moi maladroit, c'est pour cela que je préconise d'éviter des nommages pouvant porter à confusion voire à conflit
    soit comme tu dis, éviter les nommages pouvant porter à confusion, soit éviter les appels implicites à l'objet window et justement le préciser. (ou alors bien connaitre son contexte).


    je pense (donc selon moi) que les 2 façons de faire se valent.

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

Discussions similaires

  1. Réponses: 6
    Dernier message: 03/11/2010, 11h08
  2. Réponses: 11
    Dernier message: 09/09/2010, 02h53
  3. Script qui fonctionne sous FireFox mais pas sous IE
    Par Sebastien14 dans le forum Général JavaScript
    Réponses: 10
    Dernier message: 27/01/2009, 10h32
  4. [MySQL] vos avis sur un script qui fonctionne pas
    Par younek dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 25/12/2008, 16h47
  5. [Configuration] script qui fonctionne en mode console et non a partir d'un browser
    Par nannous dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 4
    Dernier message: 06/12/2006, 11h50

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