Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

Sujet : Boucle infinie Element.prototype (.appendChildJsonElement) [ JavaScript Orienté objet (POO) / Function & Méthodes ] (JoJo738)

dimanche 17 août 2008 à 19:35:07 | Boucle infinie Element.prototype (.appendChildJsonElement)

JoJo738

Membre Club
Hello tous ;)

Après moult recherches sur le web, n'ayant point trouvé mon bonheur, je me suis mis à programmer ^^
El fait, je cherche à construire à partir de codes Json l'équivalent en Element (afin de m'éviter toute cette tache laborieuse des document.createElement ^^)
Et par soucis de propreté de mon code j'ai decidé de l'implémenter directement dans le Element.prototype

Et là, j'ai un gros soucis ... tout marche, sauf quand je veux passer à l'element enfant (à savoir create.appendChildJsonElements(json[i]);) ou je me retrouve avec une boucle infinie (ici label (ok)/description (ok)/description (plus ok)/description/.../description/...)

Quelqu'un à une idée ??

La fonction :
Element.prototype.appendChildJsonElements = function (json)
{
  if( json == 'undefined' ) {
          throw 'Error !';
  }
  else if( json.constructor == String ) {
      // element.appendChildJsonElements('TextNode');
      this.appendChild(document.createTextNode(json));
  }
        else {
          if( json[0].constructor != String ) {
                  throw 'The first argument must be a String (name of the Element)';
          }
                //alert('# createElement("' + json[0] + '");');
                // The first argument :
                // ['ELEMENT' \[, Args\]]
                create = document.createElement(json[0]);
               
          for ( i = 1 ; i < json.length ; i++ ) {
                        if( json[i] instanceof String )
                        {
                             // Text : String format
                                // ['element', 'texte']
                                create.appendChild(document.createTextNode(json[i]));
                        }
                        else if( json[i] instanceof Array )
                        {
                                // New Element [Element \[, Args\]]
                                // ['element', ['otherelement']]
                                alert('### createnewelement ' + json[i]);
                                //create.appendChildJsonElements(json[i]);
                                create.appendChildJsonElements(json[i]);
                        }

                        else if( json[i] instanceof Object )
                        {
                             // Arguments {'name' : 'value'}
                                // ['element', {'name' : 'value', 'name2' : 'value2'}]
                                for( val in json[i] )
                                {
                                        create.setAttribute(val, json[i][val]);
                                }
                        }
                }
                this.appendChild(create);
        }
}

r = [
  'description',
        {'label' : 'text label', 'style' : 'color: red'},
        'Text normal',
        [
          'label',
                {'value' : 'text value', 'style' : 'color: green'},
        ],
        [
          'description',
                {'label' : 'text label', 'style' : 'color: pink'},
        ],
];
$('echo').appendChildJsonElements(r);

^^ Je travaille en XUL (XulRunner)


Si ma reponse te convient, merci de l'accepter ! 

lundi 18 août 2008 à 10:46:10 | Re : Boucle infinie Element.prototype (.appendChildJsonElement)

christophe charron

Bonjour,
remarque/question certainement très bête car je ne connais rien à l'interaction json xul mais :
  1. Quelle erreur est renvoyée ?
  2. Comme sait-on que l'on est dans le bons domaine de nom ?
Je suis preneur d'infos sur json et xul car c'est en recherchant ce genre d'info que je suis tombé sur ce post (mais je développe en remote xul)

--
Cordialement,
Christophe Charron

lundi 18 août 2008 à 11:43:03 | Re : Boucle infinie Element.prototype (.appendChildJsonElement)

JoJo738

Membre Club
Hello,

- Justement, aucune erreur :s C'est juste le code qui tourne en boucle
D'ailleurs, cela ne le fait pas si il y a seulement 1 sous-element :S

- "Le domande de nom" ? Je n'utilise pas de domaine de nom ... Tu veux dire l'element parent auquel on ajoute l'élement crée ? (on extend element grace à element.prototype / le this. permet de le récupérer)

Euh, être en Xul ne change rien, c'est du bon vieux Javascript ^^ (pour ceux qui hésiteraient à répondre )


Si ma reponse te convient, merci de l'accepter ! 

lundi 18 août 2008 à 12:05:02 | Re : Boucle infinie Element.prototype (.appendChildJsonElement)

christophe charron

Pour des objets html, en effet, pas besoin de d'utiliser le domaine de nom, mais pour des objets xul, il faut lui indiquer, sinon comment veux-tu qu'il lui attribue les bons attributs/propriétés/méthodes inhérent à xul
Donc pour ajouter un treeitem, par exemple, qui n'existe pas encore en html, il faut   
var treeItem = document.createElementNS("http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul","treeitem");

idem pour insérer des éléments SVG par exemple ...

Et tu devrais essayer de poser ta question dans le forum de xulfr : [ Lien ]

lundi 18 août 2008 à 13:44:20 | Re : Boucle infinie Element.prototype (.appendChildJsonElement)

JoJo738

Membre Club
Re,

Euh ... non, pas besoin. Mon script fonctionne et pas besoin de spécifier les domaines de nom (j'ai bel est bien un rendu correcte (1er niveau)) ^^ (le domaine de nom étant spécifié dans le window)
Apparemment ce serait un problème javascript puisque ma fonction ne fait que traduire des données JS


Si ma reponse te convient, merci de l'accepter ! 



Cette discussion est classé dans : label, element, create, json, appendchildjsonelements


Répondre à ce message

Sujets en rapport avec ce message

pointeur sur element [ par bumblebee ] Boonjour, Je voudrais savoir comment récupérer un pointeur sur un élément de tableau qui se trouve dans un formulaire g déjà essayer ça mais marche po Listbox [ par mymic ] Alors j ai une textBox, en cliquant sur un bouton Ajouter la valeur saisie est ajoutée dans une listbox, imaginez un instant qu un utilisateur landa Pb avec Drag And Drop [ par Sylvain74 ] Bonjours tout le monde,voila,j a'ai recupéré un script permettant de faire du drag and drop avec les lignes d'un tableau.Je l'ai adapter pour passer d Selectionner tout les element d'un select [ par Cestmoi ] comment puis-je selectionner tout les elements d'une liste de choix en javascript ?Mon controle s'appelle "serv" et la fonction "sel().Merci ! XHTML 1.0 strict et OnClick [ par eijii ] Bonjour,ces les vacances et depuis quelques jours je m'attèles à refaire de a à z mon pt'it site. Mais j'ai un soucis lorsque je passes mon site avec onmouseover dans une iframe [ par ourson93 ] bonjourj'ai un problème de onmouseover et onmouseout .je m'explique, j'ai une iframe dans une iframe et dans celle-ci j'ai<a href="A.html" onmouseover compter le nombre de radio button [ par misterdarth ] Bonjour,Lors de la saisie d'un formulaire, je cherche à tester certains champs afin de m'assurer que l'utilisateur n'a pas mis n'importe quoi.Dans ce Acceder au contenu d'un element d'un tableau... [ par Grand Mamamouchi ] Bonjour ! Pourriez-vous me dire comment je peux acceder au contenu d'un element d'un tableau a partir d'un autre element du meme tableau ? Merci de recherche dans une listbox [ par patinaroulette ] salut a tous!!!  j'ai besoin d'aide SVPPPP le probleme est le suivant :  j'ai un champ de saisie et une liste box et lorsque je tape une serie de let selectionné une element dans liste deroulante [ par flammeon ] bonjour j'aimerai savoir comment faire pour selectionné un item dans une liste deroulante.


Nos sponsors

Sondage...

CalendriCode

Juillet 2009
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
2728293031  

Consulter la suite du CalendriCode

Téléchargements

Logiciels à télécharger sur le même thème :

Comparez les prix Nouvelle version

Photothèque Nouveau !



Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés
Temps d'éxécution de la page : 0,920 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS


Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copiez pas et ne utilisez pas dans vos sites et applications sans les avoir commandé.