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 :

Boucle pour raccourcir le code?


Sujet :

JavaScript

  1. #1
    Membre averti
    Homme Profil pro
    Inscrit en
    Août 2013
    Messages
    124
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2013
    Messages : 124
    Points : 310
    Points
    310
    Par défaut Boucle pour raccourcir le code?
    Bonsoir,
    J'ai un soucis avec un script trouvé non loin.
    Il me permet de griser des input en fonction d'une date donnée.
    voici le 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
    function verif_date_fi() {
    	Nowdate = new Date();
    	Nowdate.setHours(0);
    	Nowdate.setMinutes(0);
    	Nowdate.setSeconds(0);
    	var dd=document.getElementById("date_chq1").value;//format jj/mm/aaaa
    	var thedate=dd.split('/');
    	var an=eval(thedate[2]);
    	var mo=eval(thedate[1]);
    	var jo=eval(thedate[0]);
    	var dd_objet = new Date(an,mo-1,jo);
    		if (dd_objet > Nowdate) {
    			document.getElementById("num_chq1").disabled=true;
    			document.getElementById("date_enc_chq1").disabled=true;}
    		else {
    			document.getElementById("num_chq1").disabled=false;
    			document.getElementById("date_enc_chq1").disabled=false;
    		}
    }
    Code html : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    <input type="text" name="date_chq1" id="date_chq1" value="<?php echo $date_chq1 ;?>" placeholder="<?php echo $date_remise; ?>"onchange="verif_date_fi()">
    <input type="text" name="num_chq1" id="num_chq1" value="<?php echo($user->num_chq1) ;?>" placeholder="<?php echo $num_chq; ?>">
    <input type="text" name="date_enc_chq1" id="date_enc_chq1" value="<?php echo $date_enc_chq1 ;?>" placeholder="<?php echo $a_encaisser; ?>" >
     
    <input type="text" name="date_chq12" id="date_chq2" value="<?php echo $date_chq2 ;?>" placeholder="<?php echo $date_remise; ?>"onchange="verif_date_fi()">
    <input type="text" name="num_chq2" id="num_chq2" value="<?php echo($user->num_chq2) ;?>" placeholder="<?php echo $num_chq; ?>">
    <input type="text" name="date_enc_chq2" id="date_enc_chq2" value="<?php echo $date_enc_chq2 ;?>" placeholder="<?php echo $a_encaisser; ?>" >
     
    etc.....
    Il fonctionne parfaitement, sauf que j'ai une 10aine d'input supplémentaire et ça me gênerai de recopier 10 fois le code js.
    J'imagine qu'on doit pouvoir faire une boucle, mais je ne sais pas du tout comment.
    Une idée svp?

  2. #2
    Rédacteur/Modérateur

    Avatar de SylvainPV
    Profil pro
    Inscrit en
    Novembre 2012
    Messages
    3 375
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2012
    Messages : 3 375
    Points : 9 944
    Points
    9 944
    Par défaut
    Tu veux désactiver une dizaine d'inputs. Leur mettre un ID à chacun est long et pas pratique, un ID c'est bien pour identifier quelque-chose de manière unique. Dans ton cas, il vaut mieux ajouter un attribut class à tous tes inputs à désactiver, par exemple class="to-disable". Ensuite tu les récupères en JavaScript comme ça:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    var inputs = document.getElementsByClassName("to-disable");
    for(var i=0; i<inputs.length; i++){
       inputs[i].disabled = (dd_objet > Nowdate) ;
    }
    One Web to rule them all

  3. #3
    Membre averti
    Homme Profil pro
    Inscrit en
    Août 2013
    Messages
    124
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2013
    Messages : 124
    Points : 310
    Points
    310
    Par défaut
    Salut SylvainPV,

    Je ne suis pas sûr d'avoir compris. Dsl,
    Peut être me suis je mal expliqué. voici ce que j'ai pour le moment
    Code html : 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
    <p class="titre_paiement">Chq n°1</p>
    <input type="text" name="date_chq1" id="date_chq1" value="<?php echo $date_chq1 ;?>" placeholder="<?php echo $date_remise; ?>"onchange="verif_date_fi1()">
    <input type="text" name="chq1" id="chq1" value="<?php echo $chq1 ;?>" placeholder="<?php echo $montant; ?>">
    <input type="text" name="num_chq1" id="num_chq1" value="<?php echo($user->num_chq1) ;?>" placeholder="<?php echo $num_chq; ?>">
    <input type="text" name="date_enc_chq1" id="date_enc_chq1" value="<?php echo $date_enc_chq1 ;?>" placeholder="<?php echo $a_encaisser; ?>" >
    <input type="checkbox" name="encaisse_chq1" id="encaisse_chq1" value="1" <?php if (($user->encaisse_chq1)=='1')   echo 'checked="checked"';?>>
    <label for="encaisse_chq1"></label>
    <button type="button" value="Vider" onclick="viderChq1()"><img src="<?php echo $urlImg;?>vide_fi.png"></button>		
     
    <p class="titre_paiement">Chq n°2</p>
    <input type="text" name="date_chq2" id="date_chq2" value="<?php echo $date_chq2 ;?>" placeholder="<?php echo $date_remise; ?>"onchange="verif_date_fi2()">
    <input type="text" name="chq2" id="chq2" value="<?php echo $chq2 ;?>" placeholder="<?php echo $montant; ?>">
    <input type="text" name="num_chq2" id="num_chq2" value="<?php echo($user->num_chq2) ;?>" placeholder="<?php echo $num_chq; ?>">
    <input type="text" name="date_enc_chq2" id="date_enc_chq2" value="<?php echo $date_enc_chq2 ;?>" placeholder="<?php echo $a_encaisser; ?>">
    <input type="checkbox" name="encaisse_chq2" id="encaisse_chq2" value="1" <?php if (($user->encaisse_chq2)=='1')   echo 'checked="checked"';?>>
    <label for="encaisse_chq2"></label>
    <button type="button" value="Vider" onclick="viderChq2()"><img src="<?php echo $urlImg;?>vide_fi.png"></button>
     
    <p class="titre_paiement">Chq n°3</p>
    <input type="text" name="date_chq3" id="date_chq3" value="<?php echo $date_chq3 ;?>" placeholder="<?php echo $date_remise; ?>"onchange="verif_date_fi3()">
    <input type="text" name="chq3" id="chq3" value="<?php echo $chq3 ;?>" placeholder="<?php echo $montant; ?>">
    <input type="text" name="num_chq3" id="num_chq3" value="<?php echo($user->num_chq3) ;?>" placeholder="<?php echo $num_chq; ?>">
    <input type="text" name="date_enc_chq3" id="date_enc_chq3" value="<?php echo $date_enc_chq3 ;?>" placeholder="<?php echo $a_encaisser; ?>">
    <input type="checkbox" name="encaisse_chq3" id="encaisse_chq3" value="1" <?php if (($user->encaisse_chq3)=='1')   echo 'checked="checked"';?>>
    <label for="encaisse_chq3"></label>
    <button type="button" value="Vider" onclick="viderChq3()"><img src="<?php echo $urlImg;?>vide_fi.png"></button>
     
    <p class="titre_paiement">Chq n°4</p>
    <input type="text" name="date_chq4" id="date_chq4" value="<?php echo $date_chq4 ;?>" placeholder="<?php echo $date_remise; ?>"onchange="verif_date_fi4()">
    <input type="text" name="chq4" id="chq4" value="<?php echo $chq4 ;?>" placeholder="<?php echo $montant; ?>">
    <input type="text" name="num_chq4" id="num_chq4" value="<?php echo($user->num_chq4) ;?>" placeholder="<?php echo $num_chq; ?>">
    <input type="text" name="date_enc_chq4" id="date_enc_chq4" value="<?php echo $date_enc_chq4 ;?>" placeholder="<?php echo $a_encaisser; ?>">
    <input type="checkbox" name="encaisse_chq4" id="encaisse_chq4" value="1" <?php if (($user->encaisse_chq4)=='1')   echo 'checked="checked"';?>>
    <label for="encaisse_chq4"></label>
    <button type="button" value="Vider" onclick="viderChq4()"><img src="<?php echo $urlImg;?>vide_fi.png"></button>
     
    <p class="titre_paiement">Chq n°5</p>
    <input type="text" name="date_chq5" id="date_chq5" value="<?php echo $date_chq5 ;?>" placeholder="<?php echo $date_remise; ?>"onchange="verif_date_fi5()">
    <input type="text" name="chq5" id="chq5" value="<?php echo $chq5 ;?>" placeholder="<?php echo $montant; ?>">
    <input type="text" name="num_chq5" id="num_chq5" value="<?php echo($user->num_chq5) ;?>" placeholder="<?php echo $num_chq; ?>">
    <input type="text" name="date_enc_chq5" id="date_enc_chq5" value="<?php echo $date_enc_chq5 ;?>" placeholder="<?php echo $a_encaisser; ?>">
    <input type="checkbox" name="encaisse_chq5" id="encaisse_chq5" value="1" <?php if (($user->encaisse_chq5)=='1')   echo 'checked="checked"';?>>
    <label for="encaisse_chq5"></label>
    <button type="button" value="Vider" onclick="viderChq5()"><img src="<?php echo $urlImg;?>vide_fi.png"></button>
    Comment puis je appliquer une fonction par rapport à mon code?

  4. #4
    Modérateur

    Avatar de NoSmoking
    Homme Profil pro
    Inscrit en
    Janvier 2011
    Messages
    16 959
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Janvier 2011
    Messages : 16 959
    Points : 44 122
    Points
    44 122
    Par défaut
    Bonjour,
    observe ce qui risque de changer d'une fonction à l'autre et passe en paramètre les éléments changeant.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    function fct_1 (){
      var valeur = document.getElementById('input_1').value;
      document.getElementById('span_1').innerHTML = valeur;
    }
    function fct_2 (){
      var valeur = document.getElementById('input_2').value;
      document.getElementById('span_2').innerHTML = valeur;
    }
    dans l'exemple ci dessus 1 et 2 sont les différences dans les identifications des éléments donc on peut factoriser comme suit
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    function fct_All ( id){
      var valeur = document.getElementById('input_' +id).value;
      document.getElementById('span_' +id).innerHTML = valeur;
    }

  5. #5
    Membre averti
    Homme Profil pro
    Inscrit en
    Août 2013
    Messages
    124
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2013
    Messages : 124
    Points : 310
    Points
    310
    Par défaut
    Salut NoSmoking,

    J'ai testé de cette manière (peut être que je me trompe)
    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
    function verif_date_fi(id) {
    	Nowdate = new Date();
    	var dd=document.getElementById('date_chq'+id).value;//format jj/mm/aaaa
    	var thedate=dd.split('/');
    	var an=eval(thedate[2]);
    	var mo=eval(thedate[1]);
    	var jo=eval(thedate[0]);
    	var dd_objet = new Date(an,mo-1,jo);
    		if (dd_objet > Nowdate) {
    			document.getElementById('num_chq'+id).disabled=true;
    			document.getElementById('date_enc_chq'+id).disabled=true;
    		}
    		else {
    			document.getElementById('num_chq'+id).disabled=false;
    			document.getElementById('date_enc_chq'+id).disabled=false;
    		}
    }
    Mais ça ne fonctionne pas.

  6. #6
    Modérateur

    Avatar de NoSmoking
    Homme Profil pro
    Inscrit en
    Janvier 2011
    Messages
    16 959
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Janvier 2011
    Messages : 16 959
    Points : 44 122
    Points
    44 122
    Par défaut
    Et tes essais ont donné quoi?

    Ne pas oublier quand même de modifier l'appel à la fonction onchange="verif_date_fi1( 1)" par exemple.

  7. #7
    Membre averti
    Homme Profil pro
    Inscrit en
    Août 2013
    Messages
    124
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2013
    Messages : 124
    Points : 310
    Points
    310
    Par défaut
    Super ça fonctionne.
    Je n'avais pas fais cette dernière modification
    Je te remercie infiniment, je tourne en rond depuis hier.
    Bonne soirée.

  8. #8
    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 : 53
    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 418
    Points
    91 418
    Billets dans le blog
    20
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    var an=eval(thedate[2]);
    Oh non...
    J'espère que personne ne mettra alert(document.cookie) dans ton champ (ou un code un peu plus vilain...)
    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

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

Discussions similaires

  1. [E-07] Boucle pour simplifier le code
    Par dahuhunter dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 10/03/2009, 14h21
  2. boucle pour insérer des enregistrements
    Par roots_man dans le forum ASP
    Réponses: 7
    Dernier message: 05/10/2004, 09h28
  3. composant builder4 pour afficher du code html
    Par BranRuz dans le forum C++Builder
    Réponses: 2
    Dernier message: 04/09/2002, 11h35
  4. Réponses: 2
    Dernier message: 29/05/2002, 20h43

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