Textfelder mit arrays füllen

R

rara

Hi all,

ich habe ein Kontaktformular mit Textfeldern. Für jedes Textfeld soll schon ein vordefinierter text drin stehen, falls man nun mit der Maus in das Textfeld klicken sollte verschwindet dieser Text und beim Austritt der Maus, falls man nix reingeschrieben hat, soll der vordefinierte Text angezeigt werden. Das alles soll mit arrays erstellt werden.

Falls mir jemand helfen würde, wäre ich super froh, hänge schon mehr als einigen Stunden unteranderem dran rum und ich krieg es einfach nicht gebacken.
Hier der Code:

Code:
var input_arr:Array = new Array("name", "tel", "email", "nachricht");
var txtinput_arr:Array = new Array("Name", "Telefonnummer", "E-Mail", "Ihre Nachricht");

input_arr.text=txtinput_arr[i];

for (var i:uint = 0; i < txtinput_arr.length; i++) {
	input_arr.text = "";
	input_arr.addEventListener(FocusEvent.FOCUS_IN,focusInHandler);
	input_arr.addEventListener(FocusEvent.FOCUS_OUT,focusOutHandler);
}

function focusInHandler(e:FocusEvent):void {
input_arr.text = "";
};

function focusOutHandler(e:FocusEvent):void {
e.target.parent.input_arr[i];
};

Manche Passagen habe ich raus gelassen da sie unnötig drin standen.
 
Zuletzt bearbeitet von einem Moderator:
Ungetestet ,sollte aber gehen:

PHP:
var input_arr:Array = new Array("nam", "tel", "email", "nachricht");
 //'name' ist bereits schon eine flash definierte Variable - anderen Bezeichner verwenden
var txtinput_arr:Array = new Array("Name", "Telefonnummer", "E-Mail", "Ihre Nachricht");


var tmpString:String;

for (var i:uint = 0; i < txtinput_arr.length; i++) {
	var tf:TextField = TextField(this.getChildByName(input_arr[i]))  ;
	tf.text = txtinput_arr[i].toString()
	tf.addEventListener(FocusEvent.FOCUS_IN,focusInHandler);
	tf.addEventListener(FocusEvent.FOCUS_OUT,focusOutHandler);
}

function focusInHandler(e:FocusEvent):void {
	tmpString = TextField(e.target).text;
	e.target.text = '';
}

function focusOutHandler(e:FocusEvent):void {
if(e.target.text  == ''){
	e.target.text = tmpString;
}
}
 
Zuletzt bearbeitet:
Hey, Danke schön. Gute Idee mit der Temp Variabel.
Mir ist grad was aufgefallen.
Wenn ich einen Text reinschreibe und wo anders klicke und wiederum in das Textfeld dann verschwindet der geschriebene Text auch und ich kann nicht mehr dort ansetzen wo ich weiter schreiben möchte. Ich müsste einen neuen Text schreiben.
 
Zuletzt bearbeitet von einem Moderator:
Ja dann kannst du nicht mehr die temp Variable benutzten, nimm dafür ein Dictionary in dem du den eingebenen Text für die jeweilige Textfeldinstanz speicherst:

PHP:
var input_arr:Array = new Array("nam", "tel", "email", "nachricht");
 //'name' ist bereits schon eine flash definierte Variable - anderen Bezeichner verwenden
var txtinput_arr:Array = new Array("Name", "Telefonnummer", "E-Mail", "Ihre Nachricht");
var dict:Dictionary = new Dictionary();
function init() {
	for (var i:uint = 0; i < txtinput_arr.length; i++) {
		var tf:TextField = TextField(this.getChildByName(input_arr[i]));
		if (tf.text == '') tf.text = txtinput_arr[i].toString();
		if (!tf.willTrigger(FocusEvent.FOCUS_IN)) 
			tf.addEventListener(FocusEvent.FOCUS_IN,focusInHandler);
		if (!tf.willTrigger(FocusEvent.FOCUS_OUT)) 
			tf.addEventListener(FocusEvent.FOCUS_OUT,focusOutHandler);
	}
}

function focusInHandler(e:FocusEvent):void {
	var flag:Boolean = false;
	for (var key:Object in dict) {
		if (key == e.target && dict[e.target] != '') {
			e.target.text = dict[e.target];
			flag = true;
		}
	}
	if (!flag) e.target.text = '';
}

function focusOutHandler(e:FocusEvent):void {
	if (e.target.text == ''){ 
		dict[e.target] = e.target.text;
		init();
	}
	else dict[e.target] = e.target.text;

}
init();
 
Muss man das auf diesen Weg lösen, man könnte doch einfach eine if-Anweisung in den focusinHandler reinschreiben? oder?
 
Muss man das auf diesen Weg lösen

Nö, müssen tut man nix, wie immer gilt - viele wege führen nach Rom ;)

man könnte doch einfach eine if-Anweisung in den focusinHandler reinschreiben? oder?

Ja hab ich doch gemacht.

Ob du jetzt durch ein Array iterierst oder tempvariablen anlegst die den status der Textfelder festhalten bleibt dir überlassen. - Ich habe es mit einem Dictionary gemacht.
Hast du das Skript denn getestet - es macht doch genau das was du möchtest.
-Die Textfelder mit einem Text belegen
-beim ersten FocusIn verschwindet der Text,
-der eingegebene Text wird für jedes Textfeld festgehalten so das du bei einem weiteren FocusIn den Text weiter schreiben kannst,
-wenn nichts eingegeben wurde wird der standarttext eingetragen

und das alles nur mit paar zeilen code ;)
 
hi, und danke für deine Antworten nochmals :).
Ich will es ja auch verstehen und da ist mir der dictionary weg etwas zu kompliziert für den moment.

Sagen wir mal ich würde einzelne temp variabeln anlegen wollen. Würde es dann so aussehen ? :
Code:
var temp1:String;
var temp2:String;
var temp3:String;

function focusInHandler(e:FocusEvent):void {
    temp1 = TextField(e.target).text;
    temp2 = TextField(e.target).text;
    temp3 = TextField(e.target).text;
    e.target.text = '';
}

oder kann ich die temp variabeln zu einem string_array bilden ? z.B. so:

var temp_arr:Array=new Array("temp1","temp2","temp3");
var tf:TextField=TextField(this.getChildByName(temp_arr[i]));

Nur hier stellt sich wieder die Frage, wie ich einzeln die temp variabeln zuordne ... ?

danke vorab
 
Sagen wir mal ich würde einzelne temp variabeln anlegen wollen. Würde es dann so aussehen ? :

Dann mußtest du erst herausfinden in welches Textfeld geklickt wurde und eine Variable diesem Feld dann zuweisen:

PHP:
var temp1:String = '';
var temp2:String = '';
function focusInHandler(e:FocusEvent):void {
   switch(e.target.name){
		case 'nam':
			 nam.text = temp1;
		break;
		case 'tel':
			 tel.text = temp2;
		break;
		//.....
	}
}
 
Zurück