salut � tous
dans l'article : http://www.developpez.net/forums/showthread.php?t=85603
j'abordais le traitement automatis� des formulaires.
reprenant la base de cette aproche j'en suis venu � d�velopper de plus en plus en m'apputant sur le DOM et prenant pour principe d'ajouter les attributs les membres et les m�thodes qui me son n�cessaire directement sur les objets du DOM
le mieux est de prendre un exemple. il existe de nombreuse fa�on de faire une navigation par onglet dans une page.
j'ai choisis d'utiliser des DIV et une liste UL LI
le plus simple est de'embarquer dans la page les DIV et la liste
d'�crire les fonctions activateTab
et de l'associer � l'�v�nement onclick du LI concern�
pour que cela fonctionne il faut lui donner l'id du LI et du DIV � activer mais aussi trouver un moyen de d�sactiver celui qui est d�j� actif.
on peut trouver facilement un moyen pour ne passer que l'id du LI (avec des valeurs de id du LI et DIV qui fait la relation) mais pour d�sactiver l'onglet actif il nous faut plus
soit il faut parcourir tous les onglets, il faut donc pouvoir les retrouver
soit il faut connaitre l'onglet actif.
dans les deux cas il nous faut une variable globale
rien de bien compliqu� et �a marche bien.
si on veux plusieurs syst�me d'onglet il faut se la jouer encore plus sioux pour faire la diff�rence.
maintenant pour faire la m�me chose en enrichissant les objets DOM directement.
voici ce qu'il devient possible de faire.
on ecrit une fonction init qui s'applique au DIV myTabGroup
Code : S�lectionner tout - Visualiser dans une fen�tre � part
1
2
3
4
5
6
7
8
9
10 <div id="myTabGroup"> <div id="tab1">contenu du tab 1</div> <div id="tab2">contenu du tab 2</div> <div id="tab3">contenu du tab 3</div> <div id="tab4">contenu du tab 4</div> <div id="tab5">contenu du tab 5</div> <div id="tab6">contenu du tab 6</div> <div id="tab7">contenu du tab 7</div> <div id="tab8">contenu du tab 8</div> </div>
elle commence par ins�rer un ul dans l'ent�te.
pour chaque fils DIV elle ajoute un LI dans le UL et lui ajoute la methode
onclick
reste le moyen de desactiver l'onglet courant.
Code : S�lectionner tout - Visualiser dans une fen�tre � part
1
2
3
4
5
6
7
8
9 var li = document.createElement('li'); li.setAttribute('class','TabOff'); li.contentDiv = curentdiv; //le div que l'on est en train de traiter li.contentDiv.style.display = 'none'; li.onclick = function(){ this.setAttribute('class','TabOn'); this.contentDiv.style.display = 'block'; }
pour cela le groupe d'onglet doit le connaitre
dans la phase d'initialisation lorsqu'on cr�e le premier LI il suffit d'ajouter
et de modifier la cr�ation du li pour avoir un moyen de le d�sactiver
Code : S�lectionner tout - Visualiser dans une fen�tre � part
1
2
3 ul.curentTab = li; //le li que l'on vient de créer li.setAttribute('class','TabOn'); // on active le li au passage li.contentDiv.style.display = 'block';
reste � d�finir les classes css qui affiche tout �a sous forme d'onglet
Code : S�lectionner tout - Visualiser dans une fen�tre � part
1
2
3
4
5
6
7
8
9
10
11
12
13
14 var li = document.createElement('li'); li.setAttribute('class','TabOff'); li.contentDiv = curentdiv; //le div que l'on est en train de traiter li.contentDiv.style.display = 'none'; li.onclick = function(){ this.parentNode.curentTab.unactivate(); //on desactive le tab courent this.parentNode.curentTab = this; //on devient le courent. this.setAttribute('class','TabOn'); this.contentDiv.style.display = 'block'; } li.unactivate = function() { this.setAttribute('class','TabOff'); this.contentDiv.style.display = 'none'; }
(il y a beaucoup d'exemple sur le net)
et on a un syst�me d'onglet fonctionnel qui s'�crit en d�clarant des div on peut en avoir autant que l'on veut dans la page et m�me les imbriquer car les methode et les donn�s sont attach� aux objets concern�s.
Je posterais ici plus tard cet exemple complet.
mais mon but aujourd'hui est put�t de pr�senter le principe.
mon approche est donc de remplacer les fonction et variable globale par des methodes et des membres des objets.
le code devient court car les objets ce connaissent eux-m�me. il n'est plus necessaire de les retrouver
avec la fonction
Code : S�lectionner tout - Visualiser dans une fen�tre � part
1
2 <input id="achamps" name="monchamps" type="text" onchange="mafonction('achamps')">
devient
Code : S�lectionner tout - Visualiser dans une fen�tre � part
1
2
3
4 function mafonction(id) { theField = document.getElementById(id); // ou tout autre moyen if (parseInt(theField.value)) theField.style.backgroundColor='green'; }
avec ce principe � d�j� �t� d�veloppe les formulaire autovalid�, le syst�me d'onglet des div auto encadr� (rounbbox) un glossaire automatique, un tableu avec survol coloration altern� et ascenseur automatique ect.
Code : S�lectionner tout - Visualiser dans une fen�tre � part
1
2
3 <input name="monchamps" type="text" onchange="if (parseInt(this.value)) this.style.backgroundColor='green';">
il en ressort que le syst�me est rapide simple crossbrowser et �volutif.
j'ai une petites dizaine de composants dans un script qu'il suffit de lier � la page pour transformer les �l�ment d�sign�s � la vol�.
le script charg� et ex�cut� ne d�clare aucune variable globale aucune fonction globale.
il n'y a donc aucou risque de conflit avec les script qu'on pourait embarquer
A+JYT
Partager