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
   | /*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