textfelder erstellen...

zerpheus

Grünschnabel
Aloha

Ich hab mal wieder ein kleines Problem.
Ich möchte mehrere Textfelder erstellen und hab gedacht, das müsste so gehen:
Code:
for (var i:Number = 0; i < this.firstChild.childNodes.length; i++) { 
 			var feld = "feld"+i;
		    this.createTextField(feld, 1, 50, 50, 100, 100);
			this[feld].html = true;
  			this[feld].htmlText = "test....";
			this[feld].multiline = true;
			}

naja geht wohl doch nicht...
was ist falsch?

grüße

Problembär
 
Hi
das tut leider immer noch nicht.
hier mal meinen ganzen code
Code:
myXML = new XML();
myXML.ignoreWhite = true;
myXML.load('myGallery/xml/gallery1.xml');
myXML.onLoad = function(ok) {
	if (ok) {
		//process data
		allGalleryData = this.firstChild.childNodes;
for (var i:Number = 0; i<allGalleryData.length; i++) {
			var feld = "feld"+i;
			this.createTextField(feld, i, 50, 50, 100, 100);
			this[feld].html = true;
			this[feld].htmlText = "test";
			this[feld].multiline = true;

			
}
}
}

aber ich weiß, dass es an der myXML.onLoad function und allGalleryData.length liegt, denn wenn ich nun auch noch anstelle von allGalleryData.length z.B. 5 eintrage und nicht in dieser funktion habe tuts !:confused::confused:

wie kann ich das umgehen...?

grüße
 
Zuletzt bearbeitet:
Hi,

hättest Du gleich gesagt, dass die Schleife in einer onLoad-Methode eines XML-Objekts liegt, hätte ich Dir sagen können, dass Du die Textfelder nicht auf der Referenz "this" erstellen kannst: "this" zeigt nämlich innerhalb dieser Methode auf das XML-Objekt (und nicht auf die lokale Zeitleiste), und auf einem XML-Objekt kannst Du keine Textfelder erstellen. Probiers so:
Code:
var that = this; // lokale Zeitleiste

myXML.onLoad = function(ok) {
	if (ok) {
		//process data
		allGalleryData = this.firstChild.childNodes;
		for (var i:Number = 0; i<allGalleryData.length; i++) {
			var feld = "feld"+i;
			that.createTextField(feld, i, 50, 50, 100, 100);
			that[feld].html = true;
			that[feld].htmlText = "test";
			that[feld].multiline = true;
		}
	}
}

Zu allGalleryData.length: Das hängt von der Struktur der XML-Datei ab. Lass Dir mal "allGalleryData.length" per trace() ausgeben, dann weißt Du, ob hier eine Anzahl zurückgegeben wird.

Gruß
.
 
ähäm...

ich hab die textfelder in Movieclips umgeändert, weil ich in die Bilder laden will,
und nun hab ich versucht diese mcs mit OnPress anzusprechen. Aber das klappt nicht.
Was muss ich bei meinem Code anders machen.
Code:
var that = this;
// lokale Zeitleiste
myXML.onLoad = function(ok) {
	if (ok) {
		//process data

		allGalleryData = this.firstChild.childNodes;
                _global.xmllength = allGalleryData.length;
		var k=1;
		for (var i:Number = 0; i<allGalleryData.length; i++) {
			var feld = "feld"+i;

			that.createEmptyMovieClip(feld, i+1);			
				that[feld].loadMovie("myGallery/images/"+allGalleryData[i].firstChild.nextSibling.nextSibling.firstChild);
				that[feld]._x = 80*(j);
				that[feld]._y = 80*(k); 
			          var pix = "bild"+i;
				_global[pix] = "myGallery/images/"+allGalleryData[i].firstChild.nextSibling.nextSibling.firstChild;
			
			k++;
		}
	}
};


opener();
function opener(){
	if (!m) {
		var m=0;

}
var field="feld"+m;


this[field].onPress = function(){
				_root.animation.imageview.loadMovie(_global.pix);
					}
				if (m<_global.xmllength) {
					
m++;
opener();

}								
}

und irgendwie bekomme ich auch keine _gloal-variable aus dieser OnLoad function heraus befordert...

grüße.

Lutz
 
Hi,

1. bitte rücke diesen Teil des Codes mal vernünfig ein, damit man sehen kann, was in welcher Reihenfolge passiert:
Code:
function opener(){
	if (!m) {
		var m=0;

}
var field="feld"+m;


this[field].onPress = function(){
				_root.animation.imageview.loadMovie(_global.pix);
					}
				if (m<_global.xmllength) {
					
m++;
opener();

}								
}
So wie ich das sehe, willst Du damit jedem Button einen Maushandler zuweisen - warum nimmst Du dafür nicht einfach eine Schleife, statt die Funktion rekursiv aufzurufen?

2.
_root.animation.imageview.loadMovie(_global.pix)
Das wird nicht funktionieren, da die Variable "_global.pix" nicht existiert. Vielmehr hast Du in Deiner ersten Schleife mehrer Globale Variablen (z.B. "_global.bild1", "_global.bild2" usw.) angelegt. Sinnvoller ist es, jedem Button eine Referenz auf das zu öffnende Bild mitzugeben:
Code:
that[feld]._image = "myGallery/images/"+allGalleryData[i].firstChild.nextSibling.nextSibling.firstChild;

Dann kannst Du das Bild in der onPress-Methode einfach so aufrufen:
Code:
this[feld].onPress = function() {
  ladeBild(this._image);
}

3. Da Du direkt in die MovieClips andere Inhalte (loadMovie) einlädst, überschreibst Du damit sämtliche Member des Clips - und damit auch die Maushandler (onPress). Du brauchst für das zu ladende Bild einen eigenen Container:
Code:
  for (var i:Number = 0; i<allGalleryData.length; i++) {
    var feld = "feld"+i;
    that.createEmptyMovieClip(feld, i+1);			
    var ct = that[feld].createEmptyMovieClip("ct", 1); // Container für die Bilder
    ct.loadMovie("myGallery/images/"+allGalleryData[i].firstChild.nextSibling.nextSibling.firstChild);
    that[feld]._x = 80*(j);
    that[feld]._y = 80*(k); 
    var pix = "bild"+i;
    that[feld]._image = "myGallery/images/"+allGalleryData[i].firstChild.nextSibling.nextSibling.firstChild;
    that[feld].onPress = function() }
    _root.animation.imageview.loadMovie(this._image);
    }
    k++;
  }

Gruß
.
 
Zurück