11548 sujets

JavaScript, DOM et API Web HTML5

Bonjour @ tous,

J'ai élaboré une petite function qui doit permettre de masquer les champs d'un formulaire.
Mon formulaire est composé de plusieurs fieldset et de paragraphe au sein du fieldset accueillant mes champs (input, select, textarea...). Le but de la fonction est de masquer tous les paragraphes à partir d'un certain rang (begin) pour le fieldset passet en paramètre (id).

Voici la fonction

function MaskGroup(id,begin)
{
    var group = document.getElementById(id);
    var begin =  begin || 0;

    for (var aa = begin; aa <= group.childNodes.length; aa++) {
       if (group.childNodes[ aa] && group.childNodes[ aa].nodeName == 'P')
       {
           group.childNodes.item(aa).setAttribute("style","display:none");
       }
    }
}


Le problème c'est que la fonction marche parfairement sous FF mais pas du tout sous IE (version 6). Le plus drôle c'est que IE ne renvoit aucun message d'erreur.
Quelqu'un sait ce qui ne vat pas???

Merci d'avance Smiley cligne

EDIT par Felipe: ne pas utiliser 'i' comme variable d'un tableau sur ce Forum, c'est compris comme de l'italique (BBCode, voir le sujet d'annonce de ce salon). J'ai remplacé par 'aa'
Modifié par Julien Royer (16 Feb 2007 - 09:22)
Effectivement ça marche beaucoup mieux avec ce que tu m'a donné.
J'ai retravaillé ma fonction, maintenant elle offre la possibilité de masquer et d'afficher les paragraphes du fieldset avec un seul et unique lien dont la valeur change dynamiquement.
Je vous poste la fonction entière ça peut en intéresser plus d'un Smiley cligne
Tester sous IE et FF.


function DisplayGroup(display,id_fieldset,begin) {

   // que fait-on ? masquer ou afficher
   if (display) {
      var new_txt = 'Masquer';
      var new_style   = 'block';
   } else {
      var new_txt = 'Afficher';
      var new_style   = 'none';
   }

   // on applique un nettoyage des noeuds pour gérer IE et FF (cf. fonction clean ci dessous)
   var fieldset = clean(document.getElementById(id_fieldset));
   var begin =  begin || 0;

   // on masque/affiche tous les paragraphes du fieldset à partir de begin
   for (var x = begin; x <= fieldset.childNodes.length; x++) {
       if (fieldset.childNodes[x] && fieldset.childNodes[x].nodeName == 'P')
       {
           fieldset.childNodes[x].style.display= new_style;
       }
    }

   // on met à jour la légende du fieldset
   var tag_legend = fieldset.firstChild;
   var tag_a      = tag_legend.childNodes[1];
   var txt        = document.createTextNode(new_txt);
       tag_a.replaceChild(txt,tag_a.firstChild);
       tag_a.onclick = function () { DisplayGroup(!display,id_fieldset,begin) }

}

// la fonction clean() qui permet de faire le nettoyage des noeuds, bien utile

function go(c){
  if(!c.data.replace(/\s/g,''))
    c.parentNode.removeChild(c);
}

function clean(d){
  var bal=d.getElementsByTagName('*');

  for(x=0;x<bal.length;x++){
    a=bal[x].previousSibling;
    if(a && a.nodeType==3)
      go(a);
    b=bal[x].nextSibling;
    if(b && b.nodeType==3)
      go(b);
  }
  return d;
}



Modifié par nohrad (29 Aug 2006 - 18:48)
salut nohrad

ta fonction m'intéresse beaucoup, je dois réaliser une site pour la gestion des interventions d'un service informatique avec des formulaires assez grands, ta fonction permettrait donc d'alléger le tout

mais je ne m'intéresse pas à la programmation web depuis longtemps, est-ce que tu pourrais m'expliquer comment tu fais l'appel à ta fonction DisplayGroup ? et éventuellement m'expliquer un peu les paramètres display et begin ?

un tout grand merci Smiley cligne
nohrad a écrit :

EDIT par Felipe: ne pas utiliser 'i' comme variable d'un tableau sur ce Forum, c'est compris comme de l'italique (BBCode, voir le sujet d'annonce de ce salon). J'ai remplacé par 'aa'


EDIT par aCOSwt : ne pas utiliser le blue comme parametre de couleur sur ce forum, c'est totalement illisible sous darkskin
Modérateur
+1 Smiley langue

Ce n'est pas gégé non plus chez moi sur le fond bleu que j'ai pour les zones de textes et de codes... Smiley lol

Je crois que d'une manière générale, vaut mieux éviter les couleurs... Smiley ravi