Partage
  • Partager sur Facebook
  • Partager sur Twitter

ids is undefined

Sujet résolu
    12 avril 2010 à 14:01:52

    Bonjour,

    Je me retrouve avec un problème qui bien qu'il me semblait négligeable s'avère être la cause du "plantage" de mon script. En effet ma console d'erreur me renvoie "ids is undefined".

    J'ai tenté de le définir sans succès, étant donné que c'est un paramètre et qu'il me semble défini, je ne vois pas comment le définir. Une petite idée?
    function traiteXmlSuggestions(xmlDoc) {
      var options = xmlDoc.getElementsByTagName('option');
      var optionsListe = [];
      var idsListe = [];
      for (var i=0; i < options.length; ++i) {
        optionsListe.push(options[i].firstChild.data);
        idsListe.push(options[i].getAttribute('id')); // variable globale récupérant l'attribut id XML.
      }
      // On retourne un objet
      return {opts : optionsListe, ids : idsListe};
    }
    


    function metsEnPlace(valeur, liste, ids){
      while(_completeDiv.childNodes.length>0) {
        _completeDiv.removeChild(_completeDiv.childNodes[0]);
      }
      // mise en place des suggestions
      for(var f=0; f<liste.length; ++f){
        var nouveauDiv=document.createElement("DIV");
        // On utilise une closure pour capturer l'id qui nous intéresse
        nouveauDiv.onmousedown=(function(id) {
          return function() {
            // Utilisation de call pour rectifier la valeur de this
            divOnMouseDown.call(this,id);
          };
        })(ids[f]);
        nouveauDiv.onmouseover=divOnMouseOver;
        nouveauDiv.onmouseout=divOnMouseOut;
        setStylePourElement(nouveauDiv,"AutoCompleteDiv");
        var nouveauSpan=document.createElement("SPAN");
        nouveauSpan.innerHTML=liste[f]; // le texte de la suggestion
        nouveauDiv.appendChild(nouveauSpan);
        _completeDiv.appendChild(nouveauDiv)
      }
      PressAction();
      if(_completeDivRows>0) {
        _completeDiv.height=16*_completeDivRows+4;
      } else {
        hideCompleteDiv();
      }
    
    }
    


    C'est dans cette fonction la ligne 14 où se trouve ids[f] que la console me renvoie l'erreur ayant pour cause un "plantage" du script.

    Merci par avance pour vos informations :)
    • Partager sur Facebook
    • Partager sur Twitter
      12 avril 2010 à 14:34:09

      Normal, ta variable est d'abord nommée idsListe puis idListe et enfin ids. Si tu change le nom de tes variables à chaque utilisation, JavaScript ne risque pas de pouvoir comprendre.
      • Partager sur Facebook
      • Partager sur Twitter
        12 avril 2010 à 18:04:06

        Hum désolé pour le idListe c'était le "s" qui a disparu (ligne 7 de la première fonction) je ne sais pas où, il n'y a que idsListe et ids et eux me semblent définis, donc en quoi javascript ne peut-il pas les intepréter le ids[f] (ligne 14 seconde fonction) je ne comprends pas?
        • Partager sur Facebook
        • Partager sur Twitter
          12 avril 2010 à 18:33:22

          On peut voir où sont définies "liste" et "ids" ainsi que l'appel de metsEnPlace() ?
          • Partager sur Facebook
          • Partager sur Twitter
            12 avril 2010 à 18:39:30

            Essaye comme ça :
            function traiteXmlSuggestions(xmlDoc) {
              var options = xmlDoc.getElementsByTagName('option');
              var optionsListe = [];
              var idsListe = [];
              for (var i=0; i < options.length; ++i) {
                optionsListe.push(options[i].firstChild.data);
                idsListe.push(options[i].getAttribute('id')); // variable globale récupérant l'attribut id XML.
              }
              // On retourne un objet
              return {'opts' : optionsListe, 'ids' : idsListe};
            }
            

            Pour que JavaScritp comprenne bien qu'il s'agit des noms des variables et pas des variables elles-même.
            • Partager sur Facebook
            • Partager sur Twitter
              12 avril 2010 à 18:48:32

              JS n'oserait pas faire une telle confusion... Si ? Tu crois qu'il tenterait une conversion en chaîne ? o_O
              • Partager sur Facebook
              • Partager sur Twitter
                12 avril 2010 à 19:17:17

                J'ai tenté ce que tu m'as conseillé, malheureusement il indique toujours la même erreur dans la seconde fonction à la même ligne.

                Pour information le script fonctionne bien (c'est un script d'autocomplétion), cependant si j'efface le mot entré (par exemple un mot commençant par un "d") et que je tente à nouveau d'entrer un mot commençant par un "d", c'est fini le script plante (plus de suggestions) et ma console d'erreurs renvoie ids is undefined.
                • Partager sur Facebook
                • Partager sur Twitter
                  12 avril 2010 à 19:25:56

                  Golmote > Je supposais plutôt une confusion de la part de Gravite qui aurait pu imaginer que ça se passe comme en PHP.

                  Mais vraisemblablement, il doit plutôt s'agir d'un paramètre faux dans le passage de la fonction metsEnPlace.

                  Gravite, peux-tu nous montrer le code qui appelle la fonction metsEnPlace ?
                  • Partager sur Facebook
                  • Partager sur Twitter
                    12 avril 2010 à 20:31:29

                    Merci beaucoup, tes indications ont été suffisantes pour que je me rende compte de mon erreur, désolé du dérangement ! :)

                    Tout fonctionne =)
                    • Partager sur Facebook
                    • Partager sur Twitter

                    ids is undefined

                    × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                    × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                    • Editeur
                    • Markdown