IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

JavaScript Discussion :

[DOM] DOM : difficulté d'affichage


Sujet :

JavaScript

  1. #1
    Membre chevronné
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    397
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 397
    Par défaut [DOM] DOM : difficulté d'affichage
    J'ai écrit un code assez simple qui me permet de construire un tableau en DOM, dans une boucle.

    Cependant seulement mes premiers éléments viennent s'afficher, la boucle se refait bien pour le bon nombre d'éléments, cependant ces derniers ne viennent pas s'ajouter au reste du tableau, je pense qu'il doit s'agir d'une erreur au moment ou j'assigne le nom des vraiables, mais je n'en suis pas sur...

    Voici mon code, légèrement simplifié :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
     
            var nouveauDiv=document.createElement('DIV');
    	var tableau=document.createElement('table');
    	var tblBody = document.createElement('tbody');
    	for (i=0;i<Liste.length;i++)
    	{		
    		var tr=document.createElement('tr');
    		var td=document.createElement('td');
    		var nouveauSpan=document.createTextNode(Liste[i]);
    		td.appendChild(nouveauSpan);
    		td.style.width=250+"px";
    		setStylePourElement(td,"TdDiv");
    		td.onmouseover=divOnMouseOver;
        	td.onmouseout=divOnMouseOut;
    		td.onclick=divOnClick;
     
    		var borderLeftRight=3;
      		var borderTopBottom=3;
     
    		td.style.borderRight=borderLeftRight+"px outset";
      		td.style.borderLeft=borderLeftRight+"px outset";
      		td.style.borderTop=borderTopBottom+"px outset";
      		td.style.borderBottom=borderTopBottom+"px outset";
    		tr.appendChild(td);
    		i++;
    		if (Liste[i])
    		{
    			var td2=document.createElement('td');
    			var nouveauSpan2=document.createTextNode(Liste[i]);
    			td2.appendChild(nouveauSpan2);
    			td2.style.width=250+"px";
    			setStylePourElement(td2,"TdDiv");
    			td2.onmouseover=divOnMouseOver;
        		td2.onmouseout=divOnMouseOut;
    			td2.onclick=divOnClick;
    		}
    		else
    		{
    			var td2=document.createElement('td');
    			td2.value="&nbsp;";
    		}
    		td2.style.borderRight=borderLeftRight+"px outset";
      		td2.style.borderLeft=borderLeftRight+"px outset";
      		td2.style.borderTop=borderTopBottom+"px outset";
      		td2.style.borderBottom=borderTopBottom+"px outset";
    		tr.appendChild(td2);
    		tblBody.appendChild(tr);
    	}
    	tableau.appendChild(tblBody);
    	nouveauDiv.appendChild(tableau);
    	_completeDiv.appendChild(nouveauDiv);
    	_completeDiv.height=30*i+4;
    	showCompleteDiv(_completeDiv);
    }
    Merci pour votre aide par avance.

  2. #2
    Expert confirmé
    Avatar de le_chomeur
    Profil pro
    Développeur informatique
    Inscrit en
    Février 2006
    Messages
    3 653
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Février 2006
    Messages : 3 653
    Par défaut
    le script étant incomplet cela risque d'être difficile , car a première vue pas de soucis de code ...

    aurais tu un exemple en ligne ??

    ou le code complet

  3. #3
    Membre chevronné
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    397
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 397
    Par défaut
    Edité avec la fonction en entier, le code complet est très long et indigeste (car pas commenté, mea culpa...)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    function OuvrirMenu(Liste,color)
    	creeAutocompletionDiv(color);
    	var nouveauDiv=document.createElement('DIV');
    	setStylePourElement(nouveauDiv,"AutoCompleteDiv");
    	var tableau=document.createElement('table');
    	var tblBody = document.createElement('tbody');
    	for (i=0;i<Liste.length;i++)
    	{		
    		var tr=document.createElement('tr');
    		var td=document.createElement('td');
    		var nouveauSpan=document.createTextNode(Liste[i]);
                    alert(Liste[i]);
    		td.appendChild(nouveauSpan);
    		td.style.width=250+"px";
    		setStylePourElement(td,"TdDiv");
    		td.onmouseover=divOnMouseOver;
        	td.onmouseout=divOnMouseOut;
    		td.onclick=divOnClick;
     
    		var borderLeftRight=3;
      		var borderTopBottom=3;
     
    		td.style.borderRight=borderLeftRight+"px outset";
      		td.style.borderLeft=borderLeftRight+"px outset";
      		td.style.borderTop=borderTopBottom+"px outset";
      		td.style.borderBottom=borderTopBottom+"px outset";
    		tr.appendChild(td);
    		i++;
    		if (Liste[i])
    		{
    			var td2=document.createElement('td');
    			var nouveauSpan2=document.createTextNode(Liste[i]);
    			td2.appendChild(nouveauSpan2);
    			td2.style.width=250+"px";
    			setStylePourElement(td2,"TdDiv");
    			td2.onmouseover=divOnMouseOver;
        		td2.onmouseout=divOnMouseOut;
    			td2.onclick=divOnClick;
    		}
    		else
    		{
    			var td2=document.createElement('td');
    			td2.value="&nbsp;";
    		}
    		td2.style.borderRight=borderLeftRight+"px outset";
      		td2.style.borderLeft=borderLeftRight+"px outset";
      		td2.style.borderTop=borderTopBottom+"px outset";
      		td2.style.borderBottom=borderTopBottom+"px outset";
    		tr.appendChild(td2);
    		tblBody.appendChild(tr);
    	}
    	tableau.appendChild(tblBody);
    	nouveauDiv.appendChild(tableau);
    	_completeDiv.appendChild(nouveauDiv);
    	_completeDiv.height=30*i+4;
    	showCompleteDiv(_completeDiv);
    }
    Color : contient un code couleur en héxa

    Liste est un tableau contenant différents textes et le alert(Liste[i]) me retourne bien au fur et à mesure de la boucle les textes que je souhaite afficher.

    Cependant avant je créais un tableau différent à chaque ligne et cela fonctionnait, depuis que j'ai sorti la création de tableau de la boucle, pour pouvoir plus facilement aligner mon menu, il n'y a plus que le premier tr qui s'affiche...

    Code de la fonction qui pourrait bugger aussi, mais je ne vois pas pourquoi :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    function showCompleteDiv(Div)
    {
      Div.style.visibility="visible";
    }

  4. #4
    Expert éminent

    Homme Profil pro
    Inscrit en
    Janvier 2007
    Messages
    13 474
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2007
    Messages : 13 474
    Par défaut
    Bonjour,
    y a un truc de bizarre : à cause de cette conditiontu risques de te retrouver avec des lignes à 1 td et d'autres à 2 td.
    La structure de ton tableau n'est pas correcte dans ce cas ...

    EDIT : Arf, non, y a un else, donc toujours 2 td

    A+

  5. #5
    Membre chevronné
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    397
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 397
    Par défaut
    Ah j'ai peut-être trouvé :

    J'ai dans mon code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    var td2=document.createElement('td');
    td2.value="&nbsp;";
    Mais le td2.value, doit être incorrect et donc me créer un problème puisque parfois 1 td et parfois 2... Ca vient peut-être de ca, je vais essayer de modifier cela.

  6. #6
    Expert éminent

    Homme Profil pro
    Inscrit en
    Janvier 2007
    Messages
    13 474
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2007
    Messages : 13 474
    Par défaut
    Citation Envoyé par tusssss Voir le message
    Mais le td2.value, doit être incorrect
    C'est surtout qu'un td n'a pas de value

    => createTextNode("&nbsp;")

    A+

  7. #7
    Membre chevronné
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    397
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 397
    Par défaut
    Citation Envoyé par E.Bzz Voir le message
    C'est surtout qu'un td n'a pas de value

    => createTextNode("&nbsp;")

    A+
    C'est ce que je voulais dire.

    Modifié, mais ne fonctionne toujours pas.

    Bout de code remplacé :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    else
    		{
    			var td2=document.createElement('td');
    			var nouveauSpan2=document.createTextNode("&nbsp;");
    			td2.appendChild(nouveauSpan2);
    			td2.style.width=250+"px";
    			setStylePourElement(td2,"TdDiv");
    		}

  8. #8
    Expert éminent

    Homme Profil pro
    Inscrit en
    Janvier 2007
    Messages
    13 474
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2007
    Messages : 13 474
    Par défaut
    Citation Envoyé par tusssss Voir le message
    Modifié, mais ne fonctionne toujours pas.
    C'est qu'il y a autre chose, mais c'était à corriger de toutes façons ...

    A+

  9. #9
    Membre chevronné
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    397
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 397
    Par défaut
    Complètement d'accord, je repars à la recherche de l'autre bug, il parait logique que celui-ci n'était pas le bug principal puisque cette partie du code n'est utilisée que si j'ai un nobre impair de texte dans la liste, alors que ce code ne fonctionne pas non plus pour les listes avec un nombre pair d'éléments...

    Merci pour l'aide. Si vous voyez quelque chose n'hésitez pas.

  10. #10
    Membre chevronné
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    397
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 397
    Par défaut
    Le fait d'ajouter plusieurs fois le même "tr" ne peux il pas être gênant ?

    Ne faut-il pas détruire le tr après l'avoir insérer dans le tableau, pour pouvoir créer une ligne après tout en conservant le tableau ainsi créé au fur et à mesure???

  11. #11
    Expert éminent

    Homme Profil pro
    Inscrit en
    Janvier 2007
    Messages
    13 474
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2007
    Messages : 13 474
    Par défaut
    Citation Envoyé par tusssss Voir le message
    Le fait d'ajouter plusieurs fois le même "tr" ne peux il pas être gênant ?
    Normalement, non.
    Mais déclarer des variables locales dans une boucle, normalement, si ( = multi-déclarations)

    Sinon, as-tu essayé d'utiliser les instructions spécifiques aux tableaux, comme indiqué dans la FAQ ?

    A+

  12. #12
    Membre chevronné
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    397
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 397
    Par défaut
    Citation Envoyé par E.Bzz Voir le message
    Normalement, non.
    Mais déclarer des variables locales dans une boucle, normalement, si ( = multi-déclarations)

    Sinon, as-tu essayé d'utiliser les instructions spécifiques aux tableaux, comme indiqué dans la FAQ ?

    A+
    Non pas essayé cela, puisque j'arrivais à faire fonctionner auparavant cela comme je voulais, j'essaye cela en début d'après-midi, merci pour l'aide.

    En effet, le problème vient surement de la multidéclaration...Go pour tout refaire avec des insertrow et insertcell...

    Merci encore.

  13. #13
    Expert éminent

    Homme Profil pro
    Inscrit en
    Janvier 2007
    Messages
    13 474
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2007
    Messages : 13 474
    Par défaut
    Citation Envoyé par tusssss Voir le message
    En effet, le problème vient surement de la multidéclaration...Go pour tout refaire avec des insertrow et insertcell...
    Avant de tout refaire, essaye quand même de virer les déclarations (var) des boucles ...

    A+

  14. #14
    Membre chevronné
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    397
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 397
    Par défaut
    Bon maintenant ça marche, mais j'ai vraiment bidouillé, je ne sais pas comment j'ai fait... Dommage. Un coup de chance, j'aime pas trop ça.

    En fait j'ai tout supprimé mes modifs et je les ai refaites en partant du même truc qui fonctionnais toujours avec les td et ça a fonctionné.

  15. #15
    Expert éminent

    Homme Profil pro
    Inscrit en
    Janvier 2007
    Messages
    13 474
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2007
    Messages : 13 474
    Par défaut
    Citation Envoyé par tusssss Voir le message
    Bon maintenant ça marche, mais j'ai vraiment bidouillé, je ne sais pas comment j'ai fait... Dommage.
    C'est encore plus mystérieux pour nous

  16. #16
    Membre chevronné
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    397
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 397
    Par défaut
    Finalement, je me suis bien fatigué pour rien, j'ai re rajouté une ligne que j'avais enlevé dans mon nouveau code, et je me suis retrouvé avec le même bug, il ne vient donc pas de la conception du tableau en lui même, mais de cette ligne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    setStylePourElement(nouveauDiv,"AutoCompleteDiv");
    J'avais assigné cette classe au tableau entier plutot qu'au td, et du coup, j'avais limité la taille de mon div, d'ou le fait que seulement la ligne s'affichait, j'étais pourtant persuadé d'avoir affublé les td de ce style et non mon div entier

    Désolé pour la recherche. Bonne soirée et merci une nouvelle fois.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [DOM] Informations sur l'affichage des informations récupérer via Xpath Query
    Par Space Cowboy dans le forum Bibliothèques et frameworks
    Réponses: 9
    Dernier message: 26/11/2010, 16h57
  2. [DOM] DOM: affichage des modifications
    Par Bengo dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 04/06/2007, 16h24
  3. [DOM] dom et ie
    Par jeff_! dans le forum Général JavaScript
    Réponses: 9
    Dernier message: 23/12/2005, 10h03
  4. [DOM] Dom -> Bug?!
    Par Zenol dans le forum Général JavaScript
    Réponses: 12
    Dernier message: 11/11/2005, 12h49
  5. [DOM] DOM et couleur de texte
    Par watcha2020 dans le forum Général JavaScript
    Réponses: 5
    Dernier message: 19/08/2005, 10h20

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo