alex: "for in" schleife wirkungslos in firefox?

Hi,

ich krepiere gerade an mozillas engine. ich habe in javascript ein variable:

obj = {

"foo" : {

"bar": "foobar"
  }
}

in dieser art. da die keys allerdings dynamisch erzeugt werden, muss ich also ne schleife darüber laufen lassen.

deswegen

for ( x in obj ) { ... }

das funktioniert ausnahmsweise in IE, aber mozilla findet einfach keine elemente. völlig wirkungslos die schleife, auch keine fehlermeldung.

in selfhtml steht:

Die for-in-Schleife können Sie in Opera bis einschließlich Version 6 nur auf selbstdefinierte Objekte und Variablen anwenden. Bei vordefinierten Objekten bleibt die Schleife wirkungslos.

Da ich diese Variable in einer Klasse konstruiere, denkt der nun es sei nicht selbstdefiniert?

Aber, wie bitte soll ich sonst auf die Elemente in obj zugreifen?

  1. Hallo alex.

    ich krepiere gerade an mozillas engine. ich habe in javascript ein variable:

    Genau genommen ein Objekt.

    obj = {

    Auf das Schlüsselwort „var“ solltest du nicht verzichten.

    "foo" : {

    "bar": "foobar"
      }
    }

    in dieser art. da die keys allerdings dynamisch erzeugt werden, muss ich also ne schleife darüber laufen lassen.

    deswegen

    for ( x in obj ) { ... }

    das funktioniert ausnahmsweise in IE, aber mozilla findet einfach keine elemente. völlig wirkungslos die schleife, auch keine fehlermeldung.

    Kann ich hier nicht nachvollziehen:

    var obj = {  
      
      'foo' : {  
      
        'baz' : 'FooBaz'  
      },  
      
      'bar' : {  
      
        'qux' : 'BarQux'  
      }  
    };  
      
    var s = '';  
      
    for (var prop in obj) {  
      
      s += 'obj[' + prop + '] = ' + obj[prop] + '\n';  
    }  
      
    alert(s);
    

    Dies bringt wie erwartet folgende Ausgabe:

    obj[foo] = [object Object]
    obj[bar] = [object Object]

    Einen schönen Sonntag noch.

    Gruß, Mathias

    --
    ie:% fl:| br:< va:) ls:& fo:) rl:( n4:~ ss:) de:] js:| mo:| zu:)
    debian/rules
    1. wie gesagt, ich bau das objekt in einer klasse zusammen und nutze dazu mootools.

      du definierst es selbst, da klappt alles wunderbar.

      bei mir klappt es auch wenn ich anstelle von obj einfach

      for ( x in { ... } ) schreibe.

      aber bei mir sieht es so aus:

      __CODE__

      var Market = new Class( {

      initialize: function( url, type, options ) {

      this.setOptions(options);
              this.Type  = type;
              this.Items = {};

      this.parseXML( url, type );
              this.injectMarket( type );
          },

      injectMarket: function( type ) {

      var market = "[size=20]" + type + "[/size]\n";

      for ( var x in this.Items ) {

      market += "\n" + this.Items[x]["count"] + "x [item:" + x + "]";
              }

      alert( market );
          }
      } );

      __CODE__

      das parseXML baut das Objekt und unter IE kommt das alert vollständig, aber firefox spuckt nix aus.

      alex

      1. und ja:

        ich kann this.Items unter firebug debuggen lassen und es spuckt mir dort alle elemente aus. das objekt wird also unter firefox auch gefüllt.

        was mir halt zu schaffen macht ist die zeile:
        "Bei vordefinierten Objekten bleibt die Schleife wirkungslos."

        ist es denn aufgrund der klasse nicht mehr selbstdefiniert unter firefox?

        wäre mir auch egal, wenn es noch ne möglichkeit gibt das objekt auszulesen ;)

        alex

        1. Hallo alex.

          was mir halt zu schaffen macht ist die zeile:
          "Bei vordefinierten Objekten bleibt die Schleife wirkungslos."

          ist es denn aufgrund der klasse nicht mehr selbstdefiniert unter firefox?

          Über diese Zeile musst du dir gar keine Gedanken machen. Mit „vordefinierten Objekten“ sind hier Objekte wie String, Number, Array, etc. gemeint.

          Einen schönen Sonntag noch.

          Gruß, Mathias

          --
          ie:% fl:| br:< va:) ls:& fo:) rl:( n4:~ ss:) de:] js:| mo:| zu:)
          debian/rules
      2. Hallo,

        das parseXML baut das Objekt und unter IE kommt das alert vollständig, aber firefox spuckt nix aus.

        Spuckt der Firefox nichts aus, oder nur ein leeres alert()? Wenn er nichts ausspuckt liegt vermutlich irgendein Fehler vor.

        Jonathan

        1. huhu,

          ich hab noch überlegt ob ich n weiteres posting mache, nun muss ich natürlich doch präziser werden.

          Alert spuckt nur die erste Zeile aus, aber nichts aus der Schleife...
          also kein JS Error an der Stelle ;)

          1. Alert spuckt nur die erste Zeile aus, aber nichts aus der Schleife...
            also kein JS Error an der Stelle ;)

            Du weißt auch wie du an die Fehlermeldungen im FF kommst?
            Denn soweit bisher der Code bekannt ist, funktioniert das im FF einwandfrei, d.h. du musst eigentlich eine Fehlermeldung haben.

            Struppi.

            1. Alert spuckt nur die erste Zeile aus, aber nichts aus der Schleife...
              also kein JS Error an der Stelle ;)

              Du weißt auch wie du an die Fehlermeldungen im FF kommst?
              Denn soweit bisher der Code bekannt ist, funktioniert das im FF einwandfrei, d.h. du musst eigentlich eine Fehlermeldung haben.

              Struppi.

              http://schnix.mdlink.biz/web2/Market.html
              http://schnix.mdlink.biz/web2/Market.js

              da kannst du gerne mal firebug drauf ansetzen...

              ich hab console.log drin, damit du am firebug sofort siehst, dass es nicht funzt. (deswegen gehts mit ie gerade nicht)

              ich logge zuerst das komplette objekt, und firebug stellt es auch korrekt dar, danach log ich den counter, der leider auf 0 ist, was ich nicht verstehe...

              grüße
              alex

              1. http://schnix.mdlink.biz/web2/Market.html

                Fehlermeldung bei mir lautet:
                Fehler: console is not defined
                Quelldatei: http://schnix.mdlink.biz/web2/Market.js
                Zeile: 109

                http://schnix.mdlink.biz/web2/Market.js

                und die hat offensichtlich einen falschen Typ, weil sie nicht wie normalerweise JS Dateien angezeigt wird, sondern zum donwload angeboten wird.

                da kannst du gerne mal firebug drauf ansetzen...

                Hab ich nicht, ich kam bisher ohne aus.

                Struppi.

                1. ja console geht wohl auch nur wenn firebug installiert ist :P

                  ich nehme dann mal console raus und mach nen alert rein, das alert gibt dann nur eine zeile, was falsch ist...

                  alex

                  http://schnix.mdlink.biz/web2/Market.html

                  Fehlermeldung bei mir lautet:
                  Fehler: console is not defined
                  Quelldatei: http://schnix.mdlink.biz/web2/Market.js
                  Zeile: 109

                  http://schnix.mdlink.biz/web2/Market.js

                  und die hat offensichtlich einen falschen Typ, weil sie nicht wie normalerweise JS Dateien angezeigt wird, sondern zum donwload angeboten wird.

                  da kannst du gerne mal firebug drauf ansetzen...

                  Hab ich nicht, ich kam bisher ohne aus.

                  Struppi.

                  1. Bitte zitiere nur das worauf du antwortest, Danke.

                    ich nehme dann mal console raus und mach nen alert rein, das alert gibt dann nur eine zeile, was falsch ist...

                    ich hab mir das jetzt mal komplett runtergeladen und mir scheint dein Problem liegt wo ganz anders, du hast das Prinzip von AJAX nicht verstanden. Du kannst erst auf die Objekte zugreifen, wenn sie vorhanden sind, das tust du aber vorher. du kannst erst in der onSuccess Funktion darauf zugreifen.

                    Struppi.

                    1. hmm?

                      ich reagiere doch auf onSuccess, was meinst du?

                      ach jetzt hab ichs, die injectMarket musste auch noch ins onSuccess, lol natürlich ;)

                      fies, solche fehler...

                      musstest mich ja nicht gleich ajax unfähig beschimpfen...
                      aber zumindest hat der vorwurf meine augen geöffnet.

                      danke

                      Bitte zitiere nur das worauf du antwortest, Danke.

                      ich nehme dann mal console raus und mach nen alert rein, das alert gibt dann nur eine zeile, was falsch ist...

                      ich hab mir das jetzt mal komplett runtergeladen und mir scheint dein Problem liegt wo ganz anders, du hast das Prinzip von AJAX nicht verstanden. Du kannst erst auf die Objekte zugreifen, wenn sie vorhanden sind, das tust du aber vorher. du kannst erst in der onSuccess Funktion darauf zugreifen.

                      Struppi.

                      1. Hallo,

                        fies, solche fehler...
                        musstest mich ja nicht gleich ajax unfähig beschimpfen...
                        aber zumindest hat der vorwurf meine augen geöffnet.

                        immerhin. Und sinnvolles Zitieren anstelle von TOFU-Klößen lernst du vielleicht auch noch. :-P

                        So long,
                         Martin

                        --
                        Ich liebe Politiker auf Wahlplakaten.
                        Sie sind tragbar, geräuschlos, und leicht wieder zu entfernen.
                          (Loriot, deutscher Satiriker)
  2. Hi,

    for ( x in obj ) { ... }
    das funktioniert ausnahmsweise in IE, aber mozilla findet einfach keine elemente. völlig wirkungslos die schleife, auch keine fehlermeldung.
    in selfhtml steht:

    Die for-in-Schleife können Sie in Opera bis einschließlich Version 6 nur auf selbstdefinierte Objekte und Variablen anwenden. Bei vordefinierten Objekten bleibt die Schleife wirkungslos.

    Wenn Du den ganzen Absatz liest, wird Dir (hoffentlich) klar, daß sich die _beiden_ von Dir zitierten Sätze auf den Opera beziehen.

    cu,
    Andreas

    --
    Warum nennt sich Andreas hier MudGuard?
    O o ostern ...
    Fachfragen unaufgefordert per E-Mail halte ich für unverschämt und werde entsprechende E-Mails nicht beantworten. Für Fachfragen ist das Forum da.
    1. Gut, wenn du mir nun noch sagst wieso es in firefox trotzdem wirkungslos ist wär ich auch zufrieden :P

      alex

      Hi,

      for ( x in obj ) { ... }
      das funktioniert ausnahmsweise in IE, aber mozilla findet einfach keine elemente. völlig wirkungslos die schleife, auch keine fehlermeldung.
      in selfhtml steht:

      Die for-in-Schleife können Sie in Opera bis einschließlich Version 6 nur auf selbstdefinierte Objekte und Variablen anwenden. Bei vordefinierten Objekten bleibt die Schleife wirkungslos.

      Wenn Du den ganzen Absatz liest, wird Dir (hoffentlich) klar, daß sich die _beiden_ von Dir zitierten Sätze auf den Opera beziehen.

      cu,
      Andreas