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 :

definir un compteur depuis la value d'un hidden


Sujet :

JavaScript

  1. #21
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    163
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 163
    Points : 93
    Points
    93
    Par défaut
    Citation Envoyé par javatwister Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    for(var j=0;j<option.length;j++){
    	option[j].selected=false
    }
     
    option[0].selected=true;
    hmmmmm très bon, très bon j'ai fais comme tu le dit et de même pour mes checkbox et c'est le le top

    @space frog: peut tu detailler un peut ce point que tu avance?

    sinon j'ai plus d'erreur sur le js, mais encore des soucis quand au bon fonctionnement... (tabindex mal redefinit pour le clone et problème de mise à checked de mes checkbox à cocher par default via le tableau que je passe à ma fonction addClone())

    Si quelqu'un peut m'aider pour ce qui est des checkbox à cocher par default... elle sont lister dans le tableau passer à la fonction mais mon clone les retourne toutes non cochées
    merci d'avance

    Ps. je remet le JS mis à jour au cas où:
    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
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
    184
    185
    186
    187
    188
    189
    190
    191
    192
    193
    194
    195
    196
    197
    198
    199
    200
    201
    202
    203
    204
    205
    206
    207
    208
    209
    210
    211
    212
    213
    214
    215
    216
    217
    218
    219
    220
    221
    222
    223
    224
    225
    226
    227
    228
    229
    230
    231
    232
    233
    234
    235
    236
    237
    238
    239
    240
    241
    242
    243
    244
    245
    246
    247
    248
    249
    250
    251
    252
    253
    254
    255
    256
    257
    258
    259
    260
    261
    262
    263
    264
    265
    266
    267
    268
    269
    270
    271
    272
    273
    274
    275
    276
    277
    278
    279
    280
    281
    282
    283
    284
    285
    286
    287
    288
    289
    290
    291
    var counter = 0;
     
    function addClone(defaultCheckboxChecked)
    {
       /*on definit le paramètre defaultCheckboxChecked passer à la fonction*/
       var defaultCheckboxChecked = defaultCheckboxChecked;
     
       /*on verifie si le champ hiddenCounter existe afin de definir counter*/
       var hiddenCounter = parseInt(document.getElementById('hiddenCounter').value, 10);
       counter = (hiddenCounter > 0) ? hiddenCounter : counter;
       counter++;
     
       /*on clone le noeud du passage à recréé*/
       var clone = document.getElementById('clonedZone').cloneNode(true);
       /*on redefinit l'id de celui-ci afin de le localiser*/
       var suffixeIdClone = 'clone_';
       var newCloneId = suffixeIdClone + counter;
       clone.id = newCloneId;
     
       /*on definit les noeuds enfant de ce clone*/
       var cloneChildNodes = clone.childNodes;
     
       /*on initialise les var de detection des paquets d'input radio*/
       var packRadioName, verifPackRadioName;
     
       /*pour chaque noeud enfant de ce clone*/
       for(var i=0;i<cloneChildNodes.length;i++)
       {
          /*on redefinit l'attibut for du noeud label à chaque label rencontrer*/
          if(cloneChildNodes[i].nodeName == 'LABEL')
          {
             var lastCibleLabel = cloneChildNodes[i].getAttribute("for");
             newCibleLabel = lastCibleLabel + counter;
             cloneChildNodes[i].setAttribute("for",newCibleLabel);
          }
          /*on initialise une variable tabindexMaxi pour avoir la valeur maxi de tabindex pour le clone*/
          var tabindexMaxi = '';
          /*on initialise une variable nbrTabindex pour avoir le nombre de tabindex pour le clone*/
          var nbrTabindex = 0;
     
          /*si on a un champs quelquonque de forulaire*/
          if(cloneChildNodes[i].nodeName == 'INPUT' || cloneChildNodes[i].nodeName == 'SELECT' || cloneChildNodes[i].nodeName == 'TEXTAREA')
          {
             /*on réassigne les attributs id pour concordance au label, et name pour recuperation POST*/
             var newFieldName = cloneChildNodes[i].name + counter;
             cloneChildNodes[i].setAttribute("name",newFieldName);
             cloneChildNodes[i].setAttribute("id",newCibleLabel);
     
             /*pour chaque champ de formulaire detecter, on ecrase tabindexMaxi pour détecter la valeur maxi de tabindex*/
             tabindexMaxi = parseInt(cloneChildNodes[i].getAttribute("tabindex"), 10);
             /*on incremente aussi le nombre de tabindex detecter*/
             nbrTabindex++;
     
             /*on redefinit les values des champs du clone à vide, ou via leur paramètres par default*/
             if(cloneChildNodes[i].nodeName == 'INPUT' || cloneChildNodes[i].nodeName == 'TEXTAREA')
             {
                /*si textarea ou input sauf type radio et checkbox*/
                if(cloneChildNodes[i].type && cloneChildNodes[i].type != 'radio' && cloneChildNodes[i].type != 'checkbox')
                {
                   cloneChildNodes[i].removeAttribute("value");
                }
                else
                {
                   /*si radio*/
                   if(cloneChildNodes[i].type == 'radio')
                   {
                      /*on definit d'abord la var verifPackRadioName à chaque fois pour comparaison avec packRadioName*/
                      verifPackRadioName = cloneChildNodes[i].name;
                      /*si PackRadioName different de verifPackRadio, on le definit ainsi qu'une var de premiere detection de pack*/
                      if(packRadioName != verifPackRadioName)
                      {
                         packRadioName = cloneChildNodes[i].name;
                         var firstRadioDetect = true;
                      }
     
                      /*si detection d'un premier radio d'un pack radio*/
                      if(firstRadioDetect == true)
                      {
                         /*on definit ce radio à checked*/
                         cloneChildNodes[i].checked = true;
                         /*on redefinit firstRadioDetect à false*/
                         firstRadioDetect = false;
                      }
                      else
                      {
                         /*on definit ce radio à non checked*/
                         cloneChildNodes[i].checked = false;
                      }
                   }
                   /*si checkbox*/
                   else
                   {
                      /*Pour chacune des valeurs par default à checked enregistrer dans le tableau defaultCheckboxChecked, on definit une variable de controle d'existance*/
                      for(var j=0;j<defaultCheckboxChecked.length;j++)
                      {
                         if(defaultCheckboxChecked[j] == cloneChildNodes[i].name)
                         {
                            var defaultCheckboxDetect = true;
                         }
                      }
     
                      /*si le checkbox en question à sa valeur par default à checked*/
                      if(defaultCheckboxDetect == true)
                      {
                         /*on definit ce radio à checked*/
                         cloneChildNodes[i].checked = true;
                         /*on reinitialise defaultCheckboxDetect à false*/
                         defaultCheckboxDetect = false;
                      }
                      else
                      {
                         /*on definit ce radio à checked*/
                         cloneChildNodes[i].checked = false;
                      }
                   }
                }
             }
             if(cloneChildNodes[i].nodeName == 'SELECT')
             {
                var option = cloneChildNodes[i].options;
                for(var j=0;j<option.length;j++)
                {
    	       option[j].selected = false
                }
                /*on redefinit le premier <option> à selected*/
                option[0].selected = true;
             }
          }
       }
     
       /*on definit la valeur de depart du tabindex pour ce clone*/
       tabindexValue = tabindexMaxi * (counter + 1);
     
       /*on reinitialise les var de detection des paquets d'input radio*/
       packRadioName = '';
       verifPackRadioName = '';
     
       /* on redefinit ensuite tout les tabindex du clone*/
       for(var i=0;i<cloneChildNodes.length;i++)
       {
          /*si on a des champs quelquonque de formulaire, on réassigne l'attribut tabindex*/
          if(cloneChildNodes[i].nodeName == 'INPUT' || cloneChildNodes[i].nodeName == 'SELECT' || cloneChildNodes[i].nodeName == 'TEXTAREA')
          {
             /*si on est dans le cas exeptionnel des input de type="radio", c'est le même tabindex pour le paquet de radio*/
             if(cloneChildNodes[i].type == 'radio')
             {
                /*on definit d'abord la var verifPackRadioName à chaque fois pour comparaison avec packRadioName*/
                verifPackRadioName = cloneChildNodes[i].name;
                /*si PackRadioName different de verifPackRadio, on le definit ainsi qu'une var de premiere detection de pack*/
                if(packRadioName != verifPackRadioName)
                {
                   packRadioName = cloneChildNodes[i].name;
                   var firstRadioDetect = true;
                }
     
                /*si detection d'un premier radio d'un pack radio*/
                if(firstRadioDetect == true)
                {
                   /*on incremente la valeur de tabulation*/
                   tabindexValue++;
                   /*on redefinit la valeur de tabindex*/
                   cloneChildNodes[i].setAttribute("tabindex",tabindexValue);
                   /*on redefinit la variable de detection firstRadioDetect à false*/
                   var firstRadioDetect = false;
                }
                else
                {
                   /*on redefinit la valeur de tabindex sans réincrementer tabindexValue*/
                   cloneChildNodes[i].setAttribute("tabindex",tabindexValue);
                }
             }
             else
             {
                /*on incremente la valeur de tabulation*/
                tabindexValue++;
                /*on redefinit la valeur de tabindex*/
                cloneChildNodes[i].setAttribute("tabindex",tabindexValue);
             }
          }
       }
     
       /*on insert ce noeud clone dans le formulaire avant l'element d'id writeroot*/
       var insertCloneBeforeThis = document.getElementById('insertCloneBeforeThis');
       insertCloneBeforeThis.parentNode.insertBefore(clone,insertCloneBeforeThis);
     
       /*on redefinit aussi les tabindex suivant jusqu'a fin du formulaire*/
       var formulaireNodes = document.getElementsByTagName("form")[0].childNodes;
     
       /*on reinitialise les var de detection des paquets d'input radio*/
       packRadioName = '';
       verifPackRadioName = '';
     
       for(i=0;i<formulaireNodes.length;i++)
       {
          /*on definit une variable de controle du point de depart de la renumerotation des tabindex*/
          if(formulaireNodes[i].id == 'insertCloneBeforeThis') startTabindexDefinition = true;
          else startTabindexDefinition = false;
     
          /*si on a des champs ou boutons quelquonque de formulaire, on réassigne l'attribut tabindex*/
          if(startTabindexDefinition == true && (formulaireNodes[i].nodeName == 'INPUT' || formulaireNodes[i].nodeName == 'SELECT' || formulaireNodes[i].nodeName == 'TEXTAREA'))
          {
             /*si on est dans le cas exeptionnel des input de type="radio", c'est le même tabindex pour le paquet de radio*/
             if(formulaireNodes[i].type == 'radio')
             {
                /*on definit d'abord la var verifPackRadioName à chaque fois pour comparaison avec packRadioName*/
                verifPackRadioName = formulaireNodes[i].name;
                /*si PackRadioName different de verifPackRadio, on le definit ainsi qu'une var de premiere detection de pack*/
                if(packRadioName != verifPackRadioName)
                {
                   packRadioName = formulaireNodes[i].name;
                   var firstRadioDetect = true;
                }
     
                /*si detection d'un premier radio d'un pack radio*/
                if(firstRadioDetect == true)
                {
                   /*on incremente la valeur de tabulation*/
                   tabindexValue++;
                   /*on redefinit la valeur de tabindex*/
                   formulaireNodes[i].setAttribute("tabindex",tabindexValue);
                   /*on redefinit la variable de detection firstRadioDetect à false*/
                   var firstRadioDetect = false;
                }
                else
                {
                   /*on redefinit la valeur de tabindex sans réincrementer tabindexValue*/
                   formulaireNodes[i].setAttribute("tabindex",tabindexValue);
                }
             }
             else
             {
                /*on incremente la valeur de tabulation*/
                tabindexValue++;
                /*on redefinit la valeur de tabindex*/
                formulaireNodes[i].setAttribute("tabindex",tabindexValue);
             }
          }
       }
     
       /*on insert la valeur du compteur dans le champs hidden d'id hiddenCounter*/
       var newHiddenCounter = document.getElementById('hiddenCounter');
       newHiddenCounter.setAttribute("value", counter);
       /*on insert la valeur du nbr de tabindex du clone dans le champs hidden d'id nbrTabindex*/
       var newNbrTabindex = document.getElementById('nbrTabindex');
       newNbrTabindex.setAttribute("value", nbrTabindex);
    }
    function afficheCounter()
    {
       alert(counter);
    }
     
    function deleteLastClone()
    {
       /*on definit l'id du dernier noeud clone ajouter*/
       var suffixeIdClone = 'clone_';
       lastCloneId = suffixeIdClone + counter;
     
       /*on decremente le compteur*/
       if(counter > 0) counter--;
     
       /*on supprime le dernier noeud clone ajouter si il y en a un*/
       var lastClone = document.getElementById(lastCloneId);
       if(lastClone)
       {
          document.getElementById(lastCloneId).parentNode.removeChild(document.getElementById(lastCloneId));
       }
     
       /*on redefinit aussi les tabindex suivant jusqu'a fin du formulaire*/
       var formulaireNodes = document.getElementsByTagName("form")[0].childNodes;
       for(i=0;i<formulaireNodes.length;i++)
       {
          /*on recupere la valeur du nbr de tabindex du clone depuis le champs hidden d'id nbrTabindex*/
          var nbrTabindex = parseInt(document.getElementById('nbrTabindex').value, 10);
     
          /*on definit une variable de controle du point de depart de la renumerotation des tabindex*/
          if(formulaireNodes[i].id == 'insertCloneBeforeThis') startTabindexDefinition = true;
          else startTabindexDefinition = false
          /*si on a des champs ou boutons quelquonque de formulaire, on réassigne l'attribut tabindex*/
          if(startTabindexDefinition == true && (formulaireNodes[i].nodeName == 'INPUT' || formulaireNodes[i].nodeName == 'SELECT' || formulaireNodes[i].nodeName == 'TEXTAREA'))
          {
             /*on recupere la valeur de tabindex du champs de formulaire*/
             var tabindexValueRecup = formulaireNodes[i].getAttribute("tabindex");
             newTabindexValue = tabindexValueRecup - nbrTabindex;
             formulaireNodes[i].setAttribute("tabindex",newTabindexValue);
          }
       }
     
       /*on insert la valeur du compteur dans le champs hidden d'id hiddenCounter*/
       var newHiddenCounter = document.getElementById('hiddenCounter');
       newHiddenCounter.setAttribute("value", counter);
    }
    Voici le html de l'appel à addClone():
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <a href="javascript: addClone(['checkbox_X','checkbox_Y']);" title="Ajouter un input">add</a>

  2. #22
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    163
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 163
    Points : 93
    Points
    93
    Par défaut
    @Space Frog: j'ai fait avec selctedIndex pour finir car c'est vrai que c'est la methode la plus light

    sinon j'ai toujour le même problème avec ce tableau passer en paramètre et le parcour de celui-ci afin de definir si le name du input checkbox est inscrit dans ce dernier

    en rouge les passages en question:
    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
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
    184
    185
    186
    187
    188
    189
    190
    191
    192
    193
    194
    195
    196
    197
    198
    199
    200
    201
    202
    203
    204
    205
    206
    207
    208
    209
    210
    211
    212
    213
    214
    215
    216
    217
    218
    219
    220
    221
    222
    223
    224
    225
    226
    227
    228
    229
    230
    231
    232
    233
    234
    235
    236
    237
    238
    239
    240
    241
    242
    243
    244
    245
    246
    247
    248
    249
    250
    251
    252
    253
    254
    255
    256
    257
    258
    259
    260
    261
    262
    263
    264
    265
    266
    267
    268
    269
    270
    271
    272
    273
    274
    275
    276
    277
    278
    279
    280
    281
    282
    283
    284
    285
    286
    287
    288
    289
    290
    291
    292
    293
    294
    295
    296
    297
    298
    299
    300
    301
    302
    303
    304
    var counter = 0;
    
    function addClone(defaultCheckboxChecked)
    {
       /*on definit le paramètre defaultCheckboxChecked passer à la fonction*/
       var defaultCheckboxChecked = defaultCheckboxChecked;
    
       /*on verifie si le champ hiddenCounter existe afin de definir counter*/
       var hiddenCounter = parseInt(document.getElementById('hiddenCounter').value, 10);
       counter = (hiddenCounter > 0) ? hiddenCounter : counter;
       counter++;
    
       /*on clone le noeud du passage à recréé*/
       var clone = document.getElementById('clonedZone').cloneNode(true);
       /*on redefinit l'id de celui-ci afin de le localiser*/
       var suffixeIdClone = 'clone_';
       var newCloneId = suffixeIdClone + counter;
       clone.id = newCloneId;
    
       /*on definit les noeuds enfant de ce clone*/
       var cloneChildNodes = clone.childNodes;
    
       /*on initialise les var de detection des paquets d'input radio*/
       var packRadioName, verifPackRadioName;
    
       /*pour chaque noeud enfant de ce clone*/
       for(var i=0;i<cloneChildNodes.length;i++)
       {
          /*on redefinit l'attibut for du noeud label à chaque label rencontrer avec detection de div aussi si label enblober par celle-ci*/
          if(cloneChildNodes[i].nodeName == 'LABEL' || cloneChildNodes[i].nodeName == 'DIV')
          {
             /*si le noeeud enfant du clone est un label*/
             if(cloneChildNodes[i].nodeName == 'LABEL')
             {
                var lastCibleLabel = cloneChildNodes[i].getAttribute("for");
                newCibleLabel = lastCibleLabel + counter;
                cloneChildNodes[i].setAttribute("for",newCibleLabel);
             }
             /*si le noeud enfant est une div, on verifie si existance d'un label dans ce noeud enfant*/
             else
             {
                var divNodes = cloneChildNodes[i].childNodes;
                for(var j=0;j<divNodes.length;j++)
                {
                   if(divNodes[j].nodeName == 'LABEL')
                   {
                      var lastCibleLabel = divNodes[j].getAttribute("for");
                      newCibleLabel = lastCibleLabel + counter;
                      divNodes[j].setAttribute("for",newCibleLabel);
                   }
                }
             }
          }
          /*on initialise une variable tabindexMaxi pour avoir la valeur maxi de tabindex pour le clone*/
          var tabindexMaxi = '';
          /*on initialise une variable nbrTabindex pour avoir le nombre de tabindex pour le clone*/
          var nbrTabindex = 0;
    
          /*si on a un champs quelquonque de forulaire*/
          if(cloneChildNodes[i].nodeName == 'INPUT' || cloneChildNodes[i].nodeName == 'SELECT' || cloneChildNodes[i].nodeName == 'TEXTAREA')
          {
             /*on réassigne les attributs id pour concordance au label, et name pour recuperation POST*/
             var newFieldName = cloneChildNodes[i].name + counter;
             cloneChildNodes[i].setAttribute("name",newFieldName);
             cloneChildNodes[i].setAttribute("id",newCibleLabel);
    
             /*pour chaque champ de formulaire detecter, on ecrase tabindexMaxi pour détecter la valeur maxi de tabindex*/
             tabindexMaxi = parseInt(cloneChildNodes[i].getAttribute("tabindex"), 10);
             /*on incremente aussi le nombre de tabindex detecter*/
             nbrTabindex++;
    
             /*on redefinit les values des champs du clone à vide, ou via leur paramètres par default*/
             if(cloneChildNodes[i].nodeName == 'INPUT' || cloneChildNodes[i].nodeName == 'TEXTAREA')
             {
                /*si textarea ou input sauf type radio et checkbox*/
                if(cloneChildNodes[i].type && cloneChildNodes[i].type != 'radio' && cloneChildNodes[i].type != 'checkbox')
                {
                   cloneChildNodes[i].removeAttribute("value");
                }
                else
                {
                   /*si radio*/
                   if(cloneChildNodes[i].type == 'radio')
                   {
                      /*on definit d'abord la var verifPackRadioName à chaque fois pour comparaison avec packRadioName*/
                      verifPackRadioName = cloneChildNodes[i].name;
                      /*si PackRadioName different de verifPackRadio, on le definit ainsi qu'une var de premiere detection de pack*/
                      if(packRadioName != verifPackRadioName)
                      {
                         packRadioName = cloneChildNodes[i].name;
                         var firstRadioDetect = true;
                      }
    
                      /*si detection d'un premier radio d'un pack radio*/
                      if(firstRadioDetect == true)
                      {
                         /*on definit ce radio à checked*/
                         cloneChildNodes[i].checked = true;
                         /*on redefinit firstRadioDetect à false*/
                         firstRadioDetect = false;
                      }
                      else
                      {
                         /*on definit ce radio à non checked*/
                         cloneChildNodes[i].checked = false;
                      }
                   }
                   /*si checkbox*/
                   else
                   {
                      /*Pour chacune des valeurs par default à checked enregistrer dans le tableau defaultCheckboxChecked, on definit une variable de controle d'existance*/
                      for(var j=0;j<defaultCheckboxChecked.length;j++)
                      {
                         if(defaultCheckboxChecked[j] == cloneChildNodes[i].name)
                         {
                            var defaultCheckboxDetect = true;
                         }
                      }
    
                      /*si le checkbox en question à sa valeur par default à checked*/
                      if(defaultCheckboxDetect == true)
                      {
                         /*on definit ce radio à checked*/
                         cloneChildNodes[i].checked = true;
                         /*on reinitialise defaultCheckboxDetect à false*/
                         defaultCheckboxDetect = false;
                      }
                      else
                      {
                         /*on definit ce radio à checked*/
                         cloneChildNodes[i].checked = false;
                      }
                   }
                }
             }
             if(cloneChildNodes[i].nodeName == 'SELECT')
             {
                cloneChildNodes[i].selectedIndex = 0;
             }
          }
       }
    
       /*on definit la valeur de depart du tabindex pour ce clone*/
       tabindexValue = tabindexMaxi * (counter + 1);
    
       /*on reinitialise les var de detection des paquets d'input radio*/
       packRadioName = '';
       verifPackRadioName = '';
    
       /* on redefinit ensuite tout les tabindex du clone*/
       for(var i=0;i<cloneChildNodes.length;i++)
       {
          /*si on a des champs quelquonque de formulaire, on réassigne l'attribut tabindex*/
          if(cloneChildNodes[i].nodeName == 'INPUT' || cloneChildNodes[i].nodeName == 'SELECT' || cloneChildNodes[i].nodeName == 'TEXTAREA')
          {
             /*si on est dans le cas exeptionnel des input de type="radio", c'est le même tabindex pour le paquet de radio*/
             if(cloneChildNodes[i].type == 'radio')
             {
                /*on definit d'abord la var verifPackRadioName à chaque fois pour comparaison avec packRadioName*/
                verifPackRadioName = cloneChildNodes[i].name;
                /*si PackRadioName different de verifPackRadio, on le definit ainsi qu'une var de premiere detection de pack*/
                if(packRadioName != verifPackRadioName)
                {
                   packRadioName = cloneChildNodes[i].name;
                   var firstRadioDetect = true;
                }
    
                /*si detection d'un premier radio d'un pack radio*/
                if(firstRadioDetect == true)
                {
                   /*on incremente la valeur de tabulation*/
                   tabindexValue++;
                   /*on redefinit la valeur de tabindex*/
                   cloneChildNodes[i].setAttribute("tabindex",tabindexValue);
                   /*on redefinit la variable de detection firstRadioDetect à false*/
                   var firstRadioDetect = false;
                }
                else
                {
                   /*on redefinit la valeur de tabindex sans réincrementer tabindexValue*/
                   cloneChildNodes[i].setAttribute("tabindex",tabindexValue);
                }
             }
             else
             {
                /*on incremente la valeur de tabulation*/
                tabindexValue++;
                /*on redefinit la valeur de tabindex*/
                cloneChildNodes[i].setAttribute("tabindex",tabindexValue);
             }
          }
       }
    
       /*on insert ce noeud clone dans le formulaire avant l'element d'id writeroot*/
       var insertCloneBeforeThis = document.getElementById('insertCloneBeforeThis');
       insertCloneBeforeThis.parentNode.insertBefore(clone,insertCloneBeforeThis);
    
       /*on redefinit aussi les tabindex suivant jusqu'a fin du formulaire*/
       var formulaireNodes = document.getElementsByTagName("form")[0].childNodes;
    
       /*on reinitialise les var de detection des paquets d'input radio*/
       packRadioName = '';
       verifPackRadioName = '';
    
       for(i=0;i<formulaireNodes.length;i++)
       {
          /*on definit une variable de controle du point de depart de la renumerotation des tabindex*/
          if(formulaireNodes[i].id == 'insertCloneBeforeThis') startTabindexDefinition = true;
          else startTabindexDefinition = false;
    
          /*si on a des champs ou boutons quelquonque de formulaire, on réassigne l'attribut tabindex*/
          if(startTabindexDefinition == true && (formulaireNodes[i].nodeName == 'INPUT' || formulaireNodes[i].nodeName == 'SELECT' || formulaireNodes[i].nodeName == 'TEXTAREA'))
          {
             /*si on est dans le cas exeptionnel des input de type="radio", c'est le même tabindex pour le paquet de radio*/
             if(formulaireNodes[i].type == 'radio')
             {
                /*on definit d'abord la var verifPackRadioName à chaque fois pour comparaison avec packRadioName*/
                verifPackRadioName = formulaireNodes[i].name;
                /*si PackRadioName different de verifPackRadio, on le definit ainsi qu'une var de premiere detection de pack*/
                if(packRadioName != verifPackRadioName)
                {
                   packRadioName = formulaireNodes[i].name;
                   var firstRadioDetect = true;
                }
    
                /*si detection d'un premier radio d'un pack radio*/
                if(firstRadioDetect == true)
                {
                   /*on incremente la valeur de tabulation*/
                   tabindexValue++;
                   /*on redefinit la valeur de tabindex*/
                   formulaireNodes[i].setAttribute("tabindex",tabindexValue);
                   /*on redefinit la variable de detection firstRadioDetect à false*/
                   var firstRadioDetect = false;
                }
                else
                {
                   /*on redefinit la valeur de tabindex sans réincrementer tabindexValue*/
                   formulaireNodes[i].setAttribute("tabindex",tabindexValue);
                }
             }
             else
             {
                /*on incremente la valeur de tabulation*/
                tabindexValue++;
                /*on redefinit la valeur de tabindex*/
                formulaireNodes[i].setAttribute("tabindex",tabindexValue);
             }
          }
       }
    
       /*on insert la valeur du compteur dans le champs hidden d'id hiddenCounter*/
       var newHiddenCounter = document.getElementById('hiddenCounter');
       newHiddenCounter.setAttribute("value", counter);
       /*on insert la valeur du nbr de tabindex du clone dans le champs hidden d'id nbrTabindex*/
       var newNbrTabindex = document.getElementById('nbrTabindex');
       newNbrTabindex.setAttribute("value", nbrTabindex);
    }
    function afficheCounter()
    {
       alert(counter);
    }
    
    function deleteLastClone()
    {
       /*on definit l'id du dernier noeud clone ajouter*/
       var suffixeIdClone = 'clone_';
       lastCloneId = suffixeIdClone + counter;
    
       /*on decremente le compteur*/
       if(counter > 0) counter--;
    
       /*on supprime le dernier noeud clone ajouter si il y en a un*/
       var lastClone = document.getElementById(lastCloneId);
       if(lastClone)
       {
          document.getElementById(lastCloneId).parentNode.removeChild(document.getElementById(lastCloneId));
    
          /*on redefinit aussi les tabindex suivant jusqu'a fin du formulaire*/
          var formulaireNodes = document.getElementsByTagName("form")[0].childNodes;
          for(i=0;i<formulaireNodes.length;i++)
          {
             /*on recupere la valeur du nbr de tabindex du clone depuis le champs hidden d'id nbrTabindex*/
             var nbrTabindex = parseInt(document.getElementById('nbrTabindex').value, 10);
    
             /*on definit une variable de controle du point de depart de la renumerotation des tabindex*/
             if(formulaireNodes[i].id == 'insertCloneBeforeThis') startTabindexDefinition = true;
             else startTabindexDefinition = false
             /*si on a des champs ou boutons quelquonque de formulaire, on réassigne l'attribut tabindex*/
             if(startTabindexDefinition == true && (formulaireNodes[i].nodeName == 'INPUT' || formulaireNodes[i].nodeName == 'SELECT' || formulaireNodes[i].nodeName == 'TEXTAREA'))
             {
                /*on recupere la valeur de tabindex du champs de formulaire*/
                var tabindexValueRecup = formulaireNodes[i].getAttribute("tabindex");
                newTabindexValue = tabindexValueRecup - nbrTabindex;
                formulaireNodes[i].setAttribute("tabindex",newTabindexValue);
             }
          }
    
          /*on insert la valeur du compteur dans le champs hidden d'id hiddenCounter*/
          var newHiddenCounter = document.getElementById('hiddenCounter');
          newHiddenCounter.setAttribute("value", counter);
       }
    
    }
    voici aussi le lien coté appel de la fonction:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <a href="javascript: addClone(new Array('checkbox_X','checkbox_Y'));" title="Ajouter un input">add</a>
    1°) si quelqu'un voit ce qui cloche ou voit une meilleur methode pour passer en revue ce tableau ?

    merci d'avance

  3. #23
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    163
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 163
    Points : 93
    Points
    93
    Par défaut
    oki, tout est résolu pour ce jolie p'tit Js et tout fonctionne à merveille

    je verai par la suite pour passer un parametre de plus à mes fonction afin de voir pour ce qu'il en ai de la copie de clone multiple dans un formulaire

    encore merci pour tout... je met résolu

+ Répondre à la discussion
Cette discussion est résolue.
Page 2 sur 2 PremièrePremière 12

Discussions similaires

  1. Réaliser un compteur depuis une date précise
    Par g0g059 dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 04/12/2010, 14h23
  2. [DATA] missing values dans l'importation depuis SPSS
    Par Claude_S dans le forum SAS Base
    Réponses: 8
    Dernier message: 22/07/2009, 09h38
  3. Affecter value à un input depuis un href
    Par fabou3377 dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 09/08/2007, 19h46
  4. Réponses: 1
    Dernier message: 29/08/2006, 16h29
  5. [FLASH MX] Définir une position x fixe : depuis la droite
    Par Miles Raymond dans le forum Flash
    Réponses: 14
    Dernier message: 07/07/2006, 15h48

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