| 12
 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
 
 | /*on verifie si le champ hiddenCounter existe afin de definir counter*/
var hiddenCounter = document.getElementById('hiddenCounter').value;
var counter = (hiddenCounter > 0) ? hiddenCounter : 0;
 
function moreFields()
{
   counter++;
 
   /*on clone le noeud du passage à recréé*/
   var newFields = document.getElementById('readroot').cloneNode(true);
   /*on redefinit l'id de celui-ci*/
   var insert = 'insert_'
   newFields.id = insert + counter;
 
   /*on definit les noeuds enfant de ce dernier*/
   var newField = newFields.childNodes;
 
   for(var i=0;i<newField.length;i++)
   {
      /*on redefinit l'attibut for du noeud label à chaque label rencontrer*/
      if(newField[i].nodeName == 'LABEL')
      {
         var lastCibleLabel = newField[i].getAttribute("for");
         newCibleLabel = lastCibleLabel + counter;
         newField[i].setAttribute("for",newCibleLabel);
      }
      /*on initialise une variable tabindexMaxi pour enregistrement de la valeur maxi de tabindex pour le clone*/
      var tabindexMaxi = '';
 
      /*si on a un champs quelquonque de forulaire, on réassigne les attributs id pour concordance au label, et name pour recuperation POST*/
      if(newField[i].nodeName == 'INPUT' || newField[i].nodeName == 'SELECT' || newField[i].nodeName == 'TEXTAREA')
      {
         newField[i].setAttribute("id",newCibleLabel);
         newField[i].name = newField[i].name + counter;
         /*pour chaque champ de formulaire detecter, on ecrase la valeur de la variable tabindexMaxi afin de détecter la valeur maxi de tabindex pour réincrémenter */
         tabindexMaxi = newField[i].getAttribute("tabindex");
      }
   }
 
   /*on definit la valeur de depart du tabindex pour ce nouveau noeud cloner*/
   tabindexValue = tabindexMaxi * counter;
 
   /* on redefinit ensuite tout les tabindex du noeud cloner suivant counter et tabindexMaxi*/
   for(var i=0;i<newField.length;i++)
   {
      /*si on a des champs quelquonque de formulaire, on réassigne l'attribut tabindex*/
      if(newField[i].nodeName == 'INPUT' || newField[i].nodeName == 'SELECT' || newField[i].nodeName == 'TEXTAREA')
      {
         /*on incremente la valeur de tabulation*/
         tabindexValue++;
         /*si on est dans le cas exeptionnel des input de type="radio", c'est le même tabindex pour le paquet de radio*/
         if(newField[i].type == 'radio')
         {
            newField[i].setAttribute("tabindex",tabindexValue);
            /*on decremente tabindexValue apès redefinition*/
            tabindexValue--;
            /*on definit une variable de controle de detection de paquet de radio*/
            var detectionRadio = true;
         }
         else
         {
            /*si il y a eut precedment detection de radio, on redefinit la var de detection*/
            if(detectionRadio == true)
            {
               detectionRadio = false;
               /*on incremente de nouveau la valeur de tabulation*/
               tabindexValue++;
            }
            newField[i].setAttribute("tabindex",tabindexValue);
         }
      }
   }
 
   /*on insert ce noeud clone dans le formulaire avant l'element d'id writeroot*/
   var insertBeforeThis = document.getElementById('insertBeforeThis');
   insertBeforeThis.parentNode.insertBefore(newFields,insertBeforeThis);
 
   /*on redefinit aussi les tabindex suivant jusqu'a fin du formulaire*/
   var formulaireNodes = document.getElementByTagName("form").childNodes;
   for(i=0;formulaireNodes.length;i++)
   {
      if(formulaireNodes[i].id == 'insertBeforeThis') startTabindexDefinition = true;
 
      /*si on a des champs ou boutons quelquonque de formulaire, on réassigne l'attribut tabindex*/
      if(startTabindexDefinition && (formulaireNodes[i].nodeName == 'INPUT' || formulaireNodes[i].nodeName == 'SELECT' || formulaireNodes[i].nodeName == 'TEXTAREA'))
      {
         /*on incremente la valeur de tabulation*/
         tabindexValue++;
         /*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')
         {
            formulaireNodes[i].setAttribute("tabindex",tabindexValue);
            /*on decremente tabindexValue apès redefinition*/
            tabindexValue--;
            /*on definit une variable de controle de detection de paquet de radio*/
            var detectionRadio = true;
         }
         else
         {
            /*si il y a eut precedment detection de radio, on redefinit la var de detection*/
            if(detectionRadio == true)
            {
               detectionRadio = false;
               /*on incremente de nouveau la valeur de tabulation*/
               tabindexValue++;
            }
            formulaireNodes[i].setAttribute("tabindex",tabindexValue);
         }
      }
   }
 
   /*on insert la valeur du compteur dans le champs hidden d'id hiddenCounter*/
   var newHiddenCounter = document.getElementById('hiddenCounter');
   newHiddenCounter.value = counter;
}
function afficheCounter()
{
   alert(counter);
} | 
Partager