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] Comportement anormal après createElement


Sujet :

JavaScript

  1. #1
    Membre confirmé Avatar de thibane
    Profil pro
    Inscrit en
    Février 2007
    Messages
    143
    Détails du profil
    Informations personnelles :
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Février 2007
    Messages : 143
    Par défaut [DOM] Comportement anormal après createElement
    Bonjour à tous.

    Je vous présente un bug que j'ai réellement du mal à fixer.
    Je vais essayer d'être le plus clair possible.

    La fonctionnalité utilise Prototype et Scriptaculous mais le problème ne vient pas de là, je pense..

    Scénario : je drag une liste 'ul' contenant plusieurs 'li' et je la drop dans un conteneur. Avec un revert:true , je fais revenir la liste de là ou je l'ai prise et je veux ensuite reconstruire cette liste là où je l'ai droppée, mais avec des valeurs d'attributs adaptés à l'emplacement.

    Voici le code des listes que je déplace :
    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
     
    <ul id="LP_1">
    	<li id="LP_1_1" class="actif2">
    		<a onclick="afficherCacher('contenuZdc1Lp1');changerBouton('LP_1_1_bouton');"> 
    				<img id="LP_1_1_bouton" 
    					 src="arbo_picto_noeudplus.gif" />
    		</a>
    		<span class="handle">Abc 1</span>
    		<div id="contenuZdc1Lp1" style="display:none;">
    			<ul id="LP_1_1_contenu">
    				<li id="LP_1_1_1" class="actif2">
    					<span class="handle">Def1</span>
    				</li>	
    				<li id="LP_1_1_2" class="actif2">
    					<span class="handle">Def2</span>
    				</li>
    			</ul>
    		</div>
    	</li>
    </ul>
    Pour information, les fonctions afficherCacher et changerBouton ne servent juste respectivement qu'à faire un display:none/block sur le div et à changer le bouton noeud+ en noeud- (histoire donc de plier de déplier l'arborescence)

    Le problème est le suivant : je déplace plusieurs zones à des endroits différents. La première fois que je fais le déplacement, aucun problème dans la reconstruction de la liste, tout fonctionne. Les fonctions javascript fonctionnent.
    Les fois suivantes, les fonctions javascript afficherCacher et changerBouton de toutes les listes ajoutées dynamiquement (reconstruites dynamiquement) n'auront d'effet que sur la dernière liste! Donc j'ai beau appuyer sur tous mes boutons recréés, ça ne re/dépliera le div (et changera le bouton) que de la dernière liste!
    Le bouton de la dernière liste, quant à lui, fonctionne bien : ça affiche mon div et change mon bouton + en - et inversement.

    Voici le code que j'utilise pour reconstruire l'arborescence décrite plus haut. Un peu long mais rien de bien méchant.

    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
    var nouvelleZone = document.createElement("li");
    
    	nouvelleZone.setAttribute("id", 'LP_' + sauvegardeIdLp + '_' + infos["zone"]);
    	nouvelleZone.setAttribute("className","actif2");
    	
    	var a = document.createElement("a");
    		a.onclick = function() {afficherCacher('contenuZdc' + infos['zone'] + 'Lp' + sauvegardeIdLp); changerBouton('LP_' + sauvegardeIdLp + '_' + infos['zone'] + '_bouton'); };
    		
    		var img = document.createElement("img");
    			img.setAttribute("id",'LP_' + sauvegardeIdLp + '_' + infos["zone"] + '_bouton');
    			img.setAttribute("src","arbo_picto_noeudplus.gif");
    		a.appendChild(img);
    	nouvelleZone.appendChild(a);
    	
    	var span = document.createElement("span");
    		span.setAttribute("className","handle orange");
    		span.appendChild(document.createTextNode(intituleZone));
    	nouvelleZone.appendChild(span);
    
    	var div = document.createElement("div");
    		div.setAttribute("id",'contenuZdc' + infos["zone"] + 'Lp' + sauvegardeIdLp);
    		div.style.setAttribute("cssText","display:none;");
    		
    		var ul = document.createElement("ul");
    			ul.setAttribute("id",'LP_' + sauvegardeIdLp + '_' + infos["zone"] + '_contenu');
    			
    			descendants = $(element.id).down('ul').immediateDescendants();
    			descendants.each(function(descendant){
    				infosD = parserId(descendant.id,0);
    				
    				var liD = document.createElement("li");
    					liD.setAttribute("id",'LP_' + sauvegardeIdLp + '_' + infosD["zone"] + '_' + infosD["ouvrageParent"]);
    					liD.setAttribute("className","actif2");
    					var spanD = document.createElement("span");
    						spanD.setAttribute("className","handle");
    						spanD.appendChild(document.createTextNode(descendant.down('span').innerHTML));
    					liD.appendChild(spanD);
    				ul.appendChild(liD);
    			});
    			
    		div.appendChild(ul);
    	nouvelleZone.appendChild(div);
    
    //On finit par ajouter la nouvelle balise "li" (la zone entiere) au bloc de destination
    conteneurDestination.appendChild(nouvelleZone);
    Je vous le répète. Le code marche parfaitement la première fois mais pose problème à partir de la deuxième fois.

    J'ai tenté avec IE Developper Toolbar de voir ce qu'il y avait dans mon attribut onclick mais il n'affiche apparemment pas les valeurs des attributs ajoutés dynamiquement (doit etre pareil dans Firebug).

    Voilà, si qqun a une idée, ça serait cool parce que moi je galère vraiment. Si vous avez besoin de plus de précisions sur le code, n'hésitez pas à demander.

  2. #2
    Rédacteur/Modérateur

    Avatar de SpaceFrog
    Homme Profil pro
    Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Inscrit en
    Mars 2002
    Messages
    39 658
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 75
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2002
    Messages : 39 658
    Billets dans le blog
    1
    Par défaut
    non sous firefox tu peux faire aficher le code généré ...

    Mais bon ...

    L'id est il modifié ???
    un id doit être unique sur une page ...
    Ma page Developpez - Mon Blog Developpez
    Président du CCMPTP (Comité Contre le Mot "Problème" dans les Titres de Posts)
    Deux règles du succès: 1) Ne communiquez jamais à quelqu'un tout votre savoir...
    Votre post est résolu ? Alors n'oubliez pas le Tag

    Venez sur le Chat de Développez !

  3. #3
    Membre confirmé Avatar de thibane
    Profil pro
    Inscrit en
    Février 2007
    Messages
    143
    Détails du profil
    Informations personnelles :
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Février 2007
    Messages : 143
    Par défaut
    Salut,

    L'id est biensûr modifié et bien évidemment unique. Une autre idée?

  4. #4
    Membre confirmé Avatar de thibane
    Profil pro
    Inscrit en
    Février 2007
    Messages
    143
    Détails du profil
    Informations personnelles :
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Février 2007
    Messages : 143
    Par défaut
    Bonjour,

    Mon problème n'est toujours pas résolu et il va bien falloir que je le résolve un jour ou l'autre. (surtout pour la boite ou je travaille^^)

    Après moultes recherches, j'ai cru comprendre qu'il pouvait y avoir des soucis à générer dynamiquement des évènements onclick sur des éléments, ceci sous IE.

    Quelqu'un a-t-il des exemples de création dynamique d'éléments auxquels serait attaché un évènement onclick plus ou moins complexe?
    Parce que je tourne en rond, j'ai déjà essayé la méthode classique (DOM) createElement, la méthode Prototype new Element mais rien n'y fait, toujours un comportement bizarre.

    Merci à ceux qui me répondront, j'en ai vraiment besoin..
    ++

  5. #5
    Invité de passage
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    1
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Novembre 2008
    Messages : 1
    Par défaut Astuce avec javascript ;-)
    Bonjour,

    J'utilise quelque chose comme ceci est cela fonctionne parfaitement ;-)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    (...)
    var a = document.createElement("a");
    a.href = "javascript:do_the_job(infos['zone'],sauvegardeIdLp)";
    (...)
    Et définir encore une fonction javascript dans la page:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    function do_the_job(info, sauvegarde)
    {
      afficherCacher('contenuZdc' + info + 'Lp' + sauvegarde);
      changerBouton('LP_' + sauvegarde+ '_' + info + '_bouton');
    }
    Meilleures salutations

    A+

  6. #6
    Membre Expert Avatar de DoubleU
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    1 106
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 1 106
    Par défaut
    Tu peux montrer comment le code javascript que tu as mis est appelé? surtout en fait comment tu passes les paramètres sauvegardeIdLp et infos["zone"]

Discussions similaires

  1. [DOM] comportement du Gestionnaire d'évènements
    Par yjuliet dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 13/06/2007, 14h03
  2. Comportement anormal de mon code?
    Par PadawanDuDelphi dans le forum Delphi
    Réponses: 3
    Dernier message: 16/01/2007, 13h10
  3. CASE WHEN avec un comportement anormal
    Par damien.sans dans le forum Oracle
    Réponses: 5
    Dernier message: 23/08/2006, 10h03
  4. Comportement étrange apres une désinstallation
    Par Sunchaser dans le forum Excel
    Réponses: 4
    Dernier message: 06/08/2005, 19h44
  5. Comportement anormal de la tabulation sur une DBGrid
    Par fredfred dans le forum Bases de données
    Réponses: 2
    Dernier message: 18/05/2005, 13h23

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