DOM ... je seche !

DOM ... je seche ! - HTML/CSS - Programmation

Marsh Posté le 24-03-2005 à 16:02:12    

bon j'arrete pas de lire des docs sur le DOM et "comment séparer le contenu de la forme" (etc etc) pour etre aux normes XHTML etc etc... blabla bla...
 
j'ai compris qu'il faut utiliser des addeventlistener ou des attachevents pour "capter" les evenements qui interviennent dans la page, j'ai compris qu'il faut "boucler" sur chaque élément de la page pour tester si l'evenement correspond avec l'objet dans la page...
 
... mais j'y arrive po !! :lol:
 
c'est dingue non ?  
 
 :pt1cable:

Reply

Marsh Posté le 24-03-2005 à 16:02:12   

Reply

Marsh Posté le 24-03-2005 à 16:03:30    

trop ouf

Reply

Marsh Posté le 24-03-2005 à 16:03:53    

Ouais, dingue

Reply

Marsh Posté le 24-03-2005 à 16:09:13    

... en fait c toujours mes histoires de parametres que j'arrive pas à faire passer... bef je vais fouiller encore un peu je pense

Reply

Marsh Posté le 24-03-2005 à 16:12:16    

ok, tiens nous au courant surtout ;)

Reply

Marsh Posté le 24-03-2005 à 16:19:05    

dites... ça vous arrive parfois d'avoir une tete² en sortant du taff ???

Reply

Marsh Posté le 24-03-2005 à 16:30:43    

toujours

Reply

Marsh Posté le 24-03-2005 à 16:31:10    

Au début oui, mais maintenant, je crois que je me suis fait complement bouffé par le systeme  :)

Reply

Marsh Posté le 24-03-2005 à 16:33:33    

quand tu parles de séparer le contenu, la présentation et le comportement, tu veux dire mettre juste un lien vers un script en haut de page, ne mettre aucun onclick ou quoi que ce soit, et que ça marche ?

Reply

Marsh Posté le 24-03-2005 à 16:36:05    

oui voila c un truc comme ça ! :) !
 
avec des trucs genre :
 
if (window.addEventListener) window.addEventListener("click",ActionColor,false);
  else if (window.attachEvent) window.attachEvent("click",ActionColor);
 
ma fonction actioncolor est en stade embryonnaire raté genre :
 

Code :
  1. function ActionColor(couleur,nom,div,input)
  2.   {
  3.    var coul = document.getElementById(''+div+'').cloneNode(true);
  4.    var listitems = coul.getElementsByTagName('li');
  5.    alert(listitems);
  6.    for (i=0;i<listitems.length;i++)
  7. {
  8.  
  9.     if(listitems[i].id) listitems[i].id = listitems[i].id;
  10. }
  11.  document.getElementById(''+input+'').appendChild(coul);
  12. alert(coul);
  13. //document.getElementById(input).value = couleur;
  14. el = document.getElementById(nom);
  15. el.style.backgroundColor=""+couleur+"";
  16. toggleDisplay(div);
  17. }


 
Le probleme c qu'il se passe absolument rien ! :lol: même mest alert() ne s'affichent pas !


Message édité par freed102 le 24-03-2005 à 16:40:20
Reply

Marsh Posté le 24-03-2005 à 16:36:05   

Reply

Marsh Posté le 24-03-2005 à 16:49:54    

hum, honnetement, je ne connais pas les eventlistener, mais je pense que tu te compliques la vie pour rien.
 
En faisant, au chargement de la page, une boucle qui vérifie tous les liens avec class="popup" par exemple, pour leur mettre un onclick pour ouvrir une popup :
 

Code :
  1. function tousLesLiensPopupEnPopup() {
  2.   // je ne sais plus comment retrouver le nombre de liens avec classe popup, c'est quelque chose avec getElementByClassName je crois, enfin, ca doit se trouver pas trop difficilement. Ensuite tu les mets dans un tableau, par exemple liensPopup
  3.   for (i=0;i<liensPopup.length;i++) {
  4.     liensPopup[i].onclick = "fonctionQuiOuvreUnePopup(this.href); return false;";
  5.   }
  6. }
  7. window.onload=tousLesLiensPopupEnPopup;


 
Voilà, c'est une fonction très certainement fausse, mais c'est dans l'idée (chez moi j'avais fait un truc dans le genre qui marche, je te filerais le code si ca t'intéresse)

Reply

Marsh Posté le 24-03-2005 à 18:06:06    

ouai ça peut etre une idée mais ce que j'arrive pas à faire c'est recuperer la valeur de l'objet cliqué !
 

Code :
  1. function addEvent(obj,evType,fn,capt) // ajoute un événement sans écraser l'éxistant.
  2. {
  3.  if(obj.addEventListener)
  4.  {
  5.  obj.addEventListener(evType,fn,capt);return true;// NS6+
  6.  }
  7.  else if(obj.attachEvent)
  8.  {
  9.  obj.attachEvent("on"+evType,fn); // IE 5+
  10.  }
  11.  else
  12.  {
  13.  return false;
  14.  }
  15. }
  16. function initColor()
  17. {
  18. D=document;
  19. var listitems = document.getElementsByTagName('li');
  20.    alert(listitems.id);
  21.    for (i=0;i<listitems.length;i++)
  22. {
  23.  
  24.     if(listitems[i].id)
  25. {
  26. listitems[i].id = listitems.id;
  27. alert(i);
  28. }
  29. }
  30. addEvent(listitems[i],"click",ActionColor);
  31. }


Message édité par freed102 le 24-03-2005 à 18:08:37
Reply

Marsh Posté le 24-03-2005 à 19:51:28    

finalement monsieur cosmoschtroumpt, j'ai suivi ton exemple ! j'ai melé ça un peu avec ma methode... et ça m'emmene quelquepart... c'est bon signe ! je sais pas si c "correct"... en tous cas ça a l'air de marcher !
 

Code :
  1. function list_items()
  2. {
  3. var list=document.getElementsByTagName('li');
  4.   for (i=0;i<list.length;i++)
  5.   {
  6.     list[i].onclick = function(){
  7. alert(this.id);
  8. }
  9.   }
  10. }
  11. addEvent(window,"load",list_items) ;
  12. function addEvent(obj,evType,fn,capt) // ajoute un événement sans écraser l'éxistant.
  13. {
  14.  if(obj.addEventListener)
  15.  {
  16.  obj.addEventListener(evType,fn,capt);// NS6+
  17.  return true;
  18.  }
  19.  else if(obj.attachEvent)
  20.  {
  21.  obj.attachEvent("on"+evType,fn); // IE 5+
  22.  }
  23.  else
  24.  {
  25.  return false;
  26.  }
  27. }

Reply

Marsh Posté le 24-03-2005 à 20:26:39    

alors comme je suis un ouf malade, je te mets le code que j'ai fait pour ma page perso à moi tout seul (oui parce qu'elle est même pas en ligne). Je m'étais même déchiré à mettre plein de commentaires partout pour me la péter en filant le code.
Y'a moyen de gravement l'optimiser mais je me suis pas penché dessus plus que ça une fois arrivé à ce stade.
 
 

Code :
  1. /******************************************
  2. * MENU A DEUX NIVEAUX                    *
  3. ******************************************
  4. * Auteur : Thomas Broust                 *
  5. * Homepage : http://cosmo0.free.fr/      *
  6. ******************************************
  7. * Gère un menu à deux niveaux qui        *
  8. * fonctionne par clic sur les éléments,  *
  9. * et non par survol. Cependant il est    *
  10. * très facile de changer les clics en    *
  11. * survols, il suffit de remplacer les    *
  12. * onclick en onmouseover.                *
  13. * Ce menu a été testé sur Firefox 1.0 et *
  14. * IE 6 SP1 et fonctionne parfaitement.   *
  15. ******************************************
  16. * Le menu doit avoir la syntaxe suivante *
  17. *                                        *
  18. * <a href="#" id="lienmenu1">menu 1</a>  *
  19. * <div id="menu1">                       *
  20. *   contenu du menu                      *
  21. * </div>                                 *
  22. *                                        *
  23. * Evidemment, n'importe quelles balises  *
  24. * conviennent, du moment qu'elles ont les*
  25. * bon IDs.                               *
  26. ******************************************
  27. * Pour marcher, modifier la variable     *
  28. * nbMenus en le nombre de menus.         *
  29. *****************************************/
  30. /******************************************
  31. * INITIALISATION DES VARIABLES           *
  32. *****************************************/
  33. // Modifier cette variable en fonction du
  34. // nombre de menus de votre page.
  35. var nbMenus = 3;
  36. for (i=1 ; i<=nbMenus ; i++) {
  37. eval("var listeAffichee" + i + ";" );
  38. }
  39. /******************************************
  40. * INITIALISER()                          *
  41. ******************************************
  42. * Appelée lors du chargement de la page, *
  43. * cette fonction a pour but de cacher les*
  44. * sous-menus, et d'activer les "onclick" *
  45. * des liens                              *
  46. *****************************************/
  47. function initialiser() {
  48. toutCacher();
  49. initLiens();
  50. }
  51. /******************************************
  52. * INITLIENS()                            *
  53. ******************************************
  54. * Affecte les comportements sur les      *
  55. * "onclick" des liens des menus          *
  56. *****************************************/
  57. function initLiens() {
  58. for(i=1 ; i<=nbMenus ; i++) {
  59.  document.getElementById("lienmenu" + i).numero = i;
  60.  document.getElementById("lienmenu" + i).onclick = function() {
  61.   afficherMenu(this.numero);
  62.  };
  63. }
  64. }
  65. /******************************************
  66. * TOUTCACHER()                           *
  67. ******************************************
  68. * Masque tous les menus et sous-menus    *
  69. *****************************************/
  70. function toutCacher() {
  71. for (i=1 ; i<=nbMenus ; i++) {
  72.  document.getElementById("menu" + i).style.display = "none";
  73.  eval("listeAffichee" + i + " = false;" );
  74. }
  75. }
  76. /******************************************
  77. * AFFICHERMENU(i)                        *
  78. ******************************************
  79. * Affiche les menus et sous-menus "i"    *
  80. * lors du clic sur les liens             *
  81. *****************************************/
  82. function afficherMenu(id) {
  83. if (eval("listeAffichee" + id)) {
  84.  document.getElementById("menu" + id).style.display = "none";
  85.  eval("listeAffichee" + id + " = false" );
  86. } else {
  87.  document.getElementById("menu" + id).style.display = "block";
  88.  eval("listeAffichee" + id + " = true" );
  89. }
  90. }
  91. window.onload=initialiser;

Reply

Marsh Posté le 06-04-2005 à 16:17:55    

vous y croyez à ça??? j'y suis arrivé !!!
d'une methode un peu bidouille j'ai l'impression (certes !!!) mais ça marche !!!! :lol:
 
look at my code :
 

Code :
  1. function list_items()
  2. {
  3. var list=document.getElementsByTagName('li');
  4.   for (i=0;i<list.length;i++)
  5.   { 
  6.     list[i].onclick = function(){
  7. var coul=this.id;
  8. var nom=this.parentNode.parentNode.parentNode.parentNode.parentNode.id;
  9. var nom2=nom.replace("div","" );
  10. var div=this.parentNode.parentNode.parentNode.id;
  11. var parentinputid=this.parentNode.parentNode.parentNode.id;
  12. var inputid="couleur"+nom2;
  13. nom=inputid+"1";
  14. ActionColor(coul,nom,div,inputid);
  15. return false;
  16. }
  17.   }
  18. }
  19. addEvent(window,"load",list_items) ;
  20. function ActionColor(couleur,nom,div,input)
  21.   {
  22.  document.getElementById(''+input+'');
  23. document.getElementById(input).value = couleur;
  24. el = document.getElementById(nom);
  25. el.style.backgroundColor=""+couleur+"";
  26. toggleDisplay(div);
  27. }


 
... truc de ouf !

Reply

Marsh Posté le 06-04-2005 à 16:20:00    

le probleme maintenant c'est que si je clique sur une "li" qui n'est pas une couleur.. ça provoque une erreur javascript ! lol ! :lol:
 
...de plus cela n'a pas l'air de fonctionner sur firefox :
 
el = document.getElementById(nom);  
el.style.backgroundColor=couleur;  


Message édité par freed102 le 06-04-2005 à 16:28:31
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed