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