"for in" schleife wirkungslos in firefox?
alex
- javascript
0 Mathias Brodala0 MudGuard0 alex
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?
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
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
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
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
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
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 ;)
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.
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
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.
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: 109http://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.
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.
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.
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
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
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