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 d'un script checkbox


Sujet :

JavaScript

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Août 2009
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2009
    Messages : 7
    Par défaut Optimisation d'un script checkbox
    Bonjour a tous !

    Je me permet de venir ici pour vous présenté mon 1er script
    Bon je vous l'accorde il est franchement simplet et je suis sur et certain qu'il y à d'autre moyen d'écrire ce script pour l'optimisé.

    Ceci étant dit je ne sais pas faire et pour être clair avec vous je cherche de l'aide pour que vous puissiez faire une critique CONSTRUCTIVE sur mon travail accomplie
    (SVP pas de Ho le noob, ou cherche google et ton amis ect comme j'ai déjà eu sur d'autre forum pour le même sujet)

    Voici le script en question je m'explique aprés :
    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
     
    <!-- Debut
     
    function checkCheckBox(formulaire)
    {
    	hardware = formulaire.hardware.checked;
    	software = formulaire.software.checked;
    	x32 = formulaire.x32.checked;
    	x64 = formulaire.x64.checked;
     
    	//si tout et vide on retourne l'erreur !
    	if ( hardware + software + x32 + x64 == false )
        {
        	alert('Vous devez choisir entre la catégorie Hardware ou Software et la catégorie Système x32 ou x64 bits pour cette solution.');
        	return false;
        }
     
    	//si tout et cocher on retourne l'erreur !
      	else if (hardware == true && software == true && x32 == true && x64 == true )
        {
    		alert('Vous avez choisi de déclarer cette solution dans la catégorie Hardware et Software ainsi que dans la catégorie Système x32 et x64 bits vous ne pouvez pas faire cela, veuillez faire un choix entre une des deux propositions de chaques catégories.');
    		return false;
    	}
     
    	//si hardware et software sont correctement coché mais que ce n'est pas le cas du système 32 et 64 on retourne l'erreur !
     	else if (hardware == true && software == false && x32 == false && x64 == false)
        {
    		alert('Vous n\'avez pas choisi si cette solution est valable pour un Système x32 ou x64 bits, veuillez faire votre choix.');
    		return false;
    	}
     
    	else if (hardware == false && software == true && x32 == false && x64 == false)
    	{
    		alert('Vous n\'avez pas choisi si cette solution est valable pour un Système x32 ou x64 bits, veuillez faire votre choix.');
    		return false;
    	}
     
    	else if (hardware == true && software == false && x32 == true && x64 == true)
    	{
    		alert('Vous ne pouvez pas classé cette solution dans la catégorie Système x32 et x64 bits, veuillez faire votre choix.');
    		return false;
    	}
     
    	else if (hardware == false && software == true && x32 == true && x64 == true)
    	{
    		alert('Vous ne pouvez pas classé cette solution dans la catégorie Système x32 et x64 bits, veuillez faire votre choix.');
    		return false;
    	}
     
    	//si la catégorie système x32 et x64 bits et correctement coché mais que ce n'est pas le cas 
    	//pour hardware et software on retourne l'erreur !
     	else if (hardware == false && software == false && x32 == true && x64 == false)
        {
    		alert('Vous n\'avez pas choisi si cette solution est une solution Hardware ou Software, veuillez faire votre choix.');
    		return false;
    	}
     
    	else if (hardware == false && software == false && x32 == false && x64 == true)
    	{
    		alert('Vous n\'avez pas choisi si cette solution est une solution Hardware ou Software, veuillez faire votre choix.');
    		return false;		
    	}
     
    	else if (hardware == true && software == true && x32 == true && x64 == false)
    	{
    		alert('Vous ne pouvez pas classé cette solution dans la catégorie Hardware et Software, veuillez faire votre choix');
    		return false;		
    	}
     
    	else if (hardware == true && software == true && x32 == false && x64 == true)
    	{
    		alert('Vous ne pouvez pas classé cette solution dans la catégorie Hardware et Software, veuillez faire votre choix');
    		return false;		
    	}	
     
    	//si on coche soft et hard et que l'on coche pas x32 ou x64 on retourne l'erreur (sa va dans les deux sens)!
     	else if (hardware == false && software == false && x32 == true && x64 ==true)
        {
    		alert('Vous ne pouvez pas choisir de classé cette solution dans la catégorie x32 et x64 bits et de ne pas choisir si c\est une solution Hardware ou Software, veuillez faire votre choix.');
    		return false;
    	}
     
     	else if (hardware == true && software == true && x32 == false && x64 == false)
        {
    		alert('Vous ne pouvez pas choisir de classé cette solution dans la catégorie Hardware et Software et de ne pas choisir de Système x32 ou x64 bits, veuillez faire votre choix. ');
    		return false;
    	}
     
    	//si tout et ok on valid ouf !!!
    	else 
    	{
    		alert('c\'est bon on continue.');
     
    	}
    		return true;
    }
    Vous le deviné surement, j'ai 4 checkbox, Hardware, Software, x32 et système x64 bits.

    Je cherche à ce qu'il y ai seulement la possibilité de validé le formulaire si un choix et fait entre Hardware et Software et un autre choix entre x32 et x64 bits.
    Si une erreur et faite par l'utilisateur alors je lui explique pourquoi et de quoi il s'agit, peut être qu'il a cocher Hardware et Software par exemple !

    Voilà d’où ce script avec beaucoup de condition et de possibilité au niveau des mauvais choix saisie par l'utilisateur.

    J'espère que vous allez pouvoir m'aider, merci d'avance a ceux qui y répondrons.

    Ps : si il manque des infos ou que je ne suis pas assez clair dans mes explications n'hésiter pas a me le dire

  2. #2
    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 658
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 75
    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 658
    Billets dans le blog
    1
    Par défaut
    un petit switch peut etre ?
    Ma page Developpez - Mon Blog Developpez
    Président du CCMPTP (Comité Contre le Mot "Problème" dans les Titres de Posts)
    Deux règles du succès: 1) Ne communiquez jamais à quelqu'un tout votre savoir...
    Votre post est résolu ? Alors n'oubliez pas le Tag

    Venez sur le Chat de Développez !

  3. #3
    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
    Billets dans le blog
    20
    Par défaut
    Déjà, vu que chaque if entraine un return, aucun de tes else n'est utile.
    Ensuite, il semblerait que tu puisses regrouper certaines conditions qui affichent le même message.
    D'autre part, une condition comme
    peut aussi bien s'écrire
    de même,
    peut s'écrire
    Pas de question technique par MP !
    Tout le monde peut participer à developpez.com, vous avez une idée, contactez-moi !
    Mes formations video2brain : La formation complète sur JavaScriptJavaScript et le DOM par la pratiquePHP 5 et MySQL : les fondamentaux
    Mon livre sur jQuery
    Module Firefox / Chrome d'intégration de JSFiddle et CodePen sur le forum

  4. #4
    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 658
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 75
    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 658
    Billets dans le blog
    1
    Par défaut
    sison il existe une technique à base de sommes de puissances de deux.

    Attribue à chaque checkbox une valeur de puissance de deux.
    Chaque combinaison de check cochées donnera un resulat de somme différent
    Il ne te restera plus qu'a comparer les sommes avec les resultats attendus,
    voir peut être même avoir un array avec les message d'alert indexé en fonction des sommes ...
    Ma page Developpez - Mon Blog Developpez
    Président du CCMPTP (Comité Contre le Mot "Problème" dans les Titres de Posts)
    Deux règles du succès: 1) Ne communiquez jamais à quelqu'un tout votre savoir...
    Votre post est résolu ? Alors n'oubliez pas le Tag

    Venez sur le Chat de Développez !

  5. #5
    Membre Expert
    Avatar de Loceka
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    2 276
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 2 276
    Par défaut
    Citation Envoyé par SpaceFrog Voir le message
    sison il existe une technique à base de sommes de puissances de deux.
    Par contre ça ne donne pas du code intuitif à lire...

    Sinon, si tu veux vraiment améliorer ton code, commence déjà par utiliser les bons éléments HTML.

    Hardware et Software sont liés à une même catégorie et sont exclusif => utiliser un radio bouton avec le même "name".
    De même pour x32 et x64.

    Comme ça t'as 7 tests qui virent :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    hardware == true && software == true && x32 == true && x64 == true
    hardware == true && software == false && x32 == true && x64 == true
    hardware == false && software == true && x32 == true && x64 == true
    hardware == true && software == true && x32 == true && x64 == false
    hardware == true && software == true && x32 == false && x64 == true
    hardware == false && software == false && x32 == true && x64 ==true
    hardware == true && software == true && x32 == false && x64 == false
    Tu peux en plus renseigner une valeur par défaut => encore 6 tests en moins
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    hardware + software + x32 + x64 == false
    hardware == true && software == false && x32 == false && x64 == false
    hardware == false && software == true && x32 == false && x64 == false
    hardware == false && software == false && x32 == true && x64 == false
    hardware == false && software == false && x32 == false && x64 == true
    hardware == false && software == false && x32 == true && x64 ==true
    Et voilà \o/
    Rien qu'avec du HTML t'as plus aucun test à faire.

    Ceci dit tu peux grandement améliorer ton script même sans ça, en appliquant ceci :
    • Déclarer les variables avec var : var hardware = formulaire.hardware.checked;.
    • Utiliser les opérateurs adéquats : hardware + software + x32 + x64 => hardware || software || x32 || x64.
    • Supprimer les conditions inutiles :
      Code : Sélectionner tout - Visualiser dans une fenêtre à part
      1
      2
      3
      4
      5
      if (hardware == true && software == false && x32 == false && x64 == false) {
        // operation 1
      } else if (hardware == false && software == true && x32 == false && x64 == false) {
        // operation 1
      }
      =>
      Code : Sélectionner tout - Visualiser dans une fenêtre à part
      1
      2
      3
      if (hardware == false && software == true) {
        // operation 1
      }
    • Ne pas faire de test d'égalité dans le cas de valeurs booléennes, comme l'a dit Bovino
    • Indenter correctement le code (tout avec des tabulations ou tout avec des espaces, mais pas un mélange des deux).


    En combinant tout ça (sans tenir compte du fait que c'est totalement inutile vu qu'avec du HTML tu peux le faire de base), on arrive à un code comme ça :
    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
    function checkCheckBox(formulaire) {
    	var hardware = formulaire.hardware.checked;
    	var software = formulaire.software.checked;
    	var x32 = formulaire.x32.checked;
    	var x64 = formulaire.x64.checked;
     
    	var valid = false;
     
    	if (!hardware && !software && !x32 && !x64) {
    		//si tout et vide on retourne l'erreur !
    		alert('Vous devez choisir entre la catégorie Hardware ou Software et la catégorie Système x32 ou x64 bits pour cette solution.');
    	} else if (hardware && software && x32 && x64) {
    		//si tout et cocher on retourne l'erreur !
    		alert('Vous avez choisi de déclarer cette solution dans la catégorie Hardware et Software ainsi que dans la catégorie Système x32 et x64 bits vous ne pouvez pas faire cela, veuillez faire un choix entre une des deux propositions de chaques catégories.');
    	} else if (!x32 && !x64) {
    		if (hardware && software) {
    			//si on coche soft et hard et que l'on coche pas x32 ou x64 on retourne l'erreur (sa va dans les deux sens)!
    			alert('Vous ne pouvez pas choisir de classé cette solution dans la catégorie Hardware et Software et de ne pas choisir de Système x32 ou x64 bits, veuillez faire votre choix. ');
    		} else {
    			//si hardware et software sont correctement coché mais que ce n'est pas le cas du système 32 et 64 on retourne l'erreur !
    			alert('Vous n\'avez pas choisi si cette solution est valable pour un Système x32 ou x64 bits, veuillez faire votre choix.');
    		}
    	} else if (x32 && x64) {
    		if (!hardware && !software) {
    			alert('Vous ne pouvez pas choisir de classé cette solution dans la catégorie x32 et x64 bits et de ne pas choisir si c\est une solution Hardware ou Software, veuillez faire votre choix.');
    		} else {
    			alert('Vous ne pouvez pas classé cette solution dans la catégorie Système x32 et x64 bits, veuillez faire votre choix.');
    		}
    	} else if (!hardware && !software) {
    		//si la catégorie système x32 et x64 bits et correctement coché mais que ce n'est pas le cas 
    		//pour hardware et software on retourne l'erreur !
    		alert('Vous n\'avez pas choisi si cette solution est une solution Hardware ou Software, veuillez faire votre choix.');
    	} else if (hardware && software) {
    		alert('Vous ne pouvez pas classé cette solution dans la catégorie Hardware et Software, veuillez faire votre choix');
    	} else {
    		//si tout et ok on valid ouf !!!
    		alert('c\'est bon on continue.');
    		valid = true;
    	}
     
    	return valid;
    }
    Et ça peut encore se simplifier en :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    function checkCheckBoxV2(formulaire) {
    	var hardware = formulaire.hardware.checked;
    	var software = formulaire.software.checked;
    	var x32 = formulaire.x32.checked;
    	var x64 = formulaire.x64.checked;
     
    	var valid = hardware ^ software && x32 ^ x64;
    	if (!valid) {
    		alert('Vous devez cocher exactement une catégorie hardware/software et une catégorie x32/x64');
    	}
     
    	return valid;
    }

  6. #6
    Membre du Club
    Profil pro
    Inscrit en
    Août 2009
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2009
    Messages : 7
    Par défaut
    Ok j'ai effectivement fait pas mal d'erreur, oublier des choses et autres
    Que dire sinon merci de m'avoir éclairé sur ce sujet, maintenant je vais m'atteler a faire les modifs sur ce script pour qu'il soit effectivement plus court mais aussi plus performant.

    Vraiment merci a vous 3 je clos le sujet avec [résolu] devant son titre

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

Discussions similaires

  1. optimisation d'un script d'inscription en PHP.
    Par JeanJean75 dans le forum Langage
    Réponses: 20
    Dernier message: 24/12/2009, 01h25
  2. Execution/optimisation d'un script php ultra long
    Par Skar dans le forum Langage
    Réponses: 2
    Dernier message: 11/06/2009, 17h23
  3. [MySQL] Besoin d'aide pour optimisation d'un script très lourd
    Par macadamgrafik dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 25/02/2009, 16h08
  4. Optimisation d'un script d'analyse
    Par azerwhite dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 6
    Dernier message: 21/10/2008, 09h48
  5. Réponses: 6
    Dernier message: 23/01/2007, 17h20

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