Texteingabe zur Laufzeit eventieren

drachenvieh

Grünschnabel
Hallo.

Ich habe mich hier mal angemeldet, da ich gerade Flash erlerne und dazu gehört ja auch Action Script.
Ich nutze Action Script 3.0

Ich habe auch gleich bezüglich einer Programmierung ein Problem.
Aber ich habe keine Codeschnipsel, da ich mit den Befehlen zu keinem Ergebnis komme
Es ist eher ein Verständnisproblem.

Ich besitze zwei Textfelder, die Eingabefelder sein sollen.

1. Nennen wir "textfeldP_txt"
2. Nennen wir "textfeldS_txt"

Nun soll die Eingabe voneinander abhängig sein. D.h. Gebe ich zur Laufzeit in "textfeldP_txt" etwas ein so soll "textfeldS_txt" sofort auf das eingegebene reagieren und Abfragen bearbeiten.

Um dies genauer zu definieren lege ich folgendes zu grunde:
Die eingegebenen Werte sind Zahlen und werden in einer Variabel jeweils gespeichert, da diese für eine anschließende Berechnung nötig sind
Die Eingabemöglichkeit in "textfeldP_txt" ist auf 3 Zeichen begrenzt soll aber auf das Maximum 100 reagieren, sprich Zahlen>100 sollen nicht eintragbar sein
Es soll auch möglich sein einen Maximum wert von zb "26" festlegen zu können. "0" ist generell nicht definiert
das "textfeldS_txt" soll auf den Eintrag in textfeldP_txt zur Laufzeit reagieren.
So soll das "textfeldS_txt" erst erscheinen wenn der Wert zwischen 1 und dem Maximalwert liegt. Der Wert aus "textfeldP_txt soll aber dennoch auswertbar sein.
Um das zu ermöglichen habe ich das textfeldS_txt in einen Movieclip gepackt, habe jedoch nicht kontrolliert ob der Alpha-Wert auch Textinput definitionen ansteuern kann, weil es ja in meinem denken eine grafische Eigenschaft ist.

Dies zur Problematik


Was ich nun probiert habe
Ein TextEvent.TEXT_INPUT funktioniert nicht, da der Anfangswert immer 0 entspricht und es wird auch nur eine Zahl pro Tastaturdruck ermittelt.
gebe ich also 92 ein bekomme ich im trace 0 udn 9 ausgegeben. Den letzten Wert kann ich also nicht verwenden.

Eine weitere Überlegung war, dass ich ein KeyboardEvent nutze. Dieses soll dann die Einer, Zehner und Hunderstelstellen überprüfen und dann mit der verallgemeinerten Operation [variabelname]*10 die Stellen auswerten und dann alles summieren so dass ich zur Laufzeit einen Wert bekomme und das "textfeldS_txt" sofort mit arbeiten kann. Dies halte ich aber für eine komplexe Angelegenheit wenn ich selbige Aktion bei späteren Scripts für ganze Wörter nutzen will. Dies sollte also vereinfacht gehen doch komme ich nicht hinter die Definition, wie man eine Texteingabe direkt während der Laufzeit auswerten kann.

Weiter habe ich überlegt ob die Zeicheneinbettung über Script individuell definierbar ist. Aber da man ja die hunderste stelle zuerst schreibt komme ich auch da nicht weiter


kurz noch eine kurze übersicht wie was reagieren soll anhand von eingegebenen Zeichenfolgen


Zahl ----------------- - Zeichenfolge -------------- - gewollte Reaktion textfeldP_txt ------------------- - Reaktion textfeldS_txt

0 ----------- 0 --------------- Eingabe verweigern ---------------- ausgeblendet bleiben
1 --------------- 1 ------------------- Eingabe der Zahl "1" --------------- einblenden
10 ----------------- 1,0 -------------------- Eingabe der Zahl 10 ------------------ einblenden
100 ---------------- 1,0,0 -------------------- Eingabe der Zahl 100 ----------------- einblenden
101 ----------------- 1,0,1 ------------------- Eingabe der Zahl 10, die letzte 1 ist ungültig ---------------- einblenden

Ich hoffe es gibt da eine simple Lösung für dieses Problem. Recherchen haben mich jedenfalls nicht erhellt.
 
Zuletzt bearbeitet:
so habe jetzt mal rumprobiert und folgende Lösung gefunden
Mein Testscript

Code:
schachtel_mc.textfeldP_txt.addEventListener(KeyboardEvent.KEY_UP, einschrieb);

var maxZahl:Number =100;

function einschrieb (evt:KeyboardEvent):void{

	
	
	if (Number (schachtel_mc.textfeldP_txt.text)>maxZahl || Number (schachtel_mc.textfeldP_txt.text)==0) {
		
		boa_mc.gotoAndStop(1);
		
		}
		else {
			boa_mc.gotoAndStop(2);
			
			}
	
	
	
	
	}

In der boa_mc befindet sich das textfeld textfeldS_txt. Die textfeldP_txt befindet sich wie man sieht in der schachtel_mc.



Auf diesen Weg kann man auf jeden Fall die Zahlen kontrollieren. Was allerdings die Sache mit Texten betrifft gibt es bestimmt eine andere Lösung über Klassen etc.
Also im Sinne von "Wenn [text].text == [datenbank].text". Wenn ich falsch liege bitte sagen bin ja ein Newb.

Und wenn es eine elegantere Lösung gibt für diese Problematik á la addChild wäre ich für einen Vorschlag dankbar ^^

Und nach wie vor steht die gewollte Eingabenverweigerung beim Eingabenbeginn mit 0 so wie eine Eingabe die größer wie die maxZahl ist im Raum...
ich kann zwar über replaceText sagen, dass er im Falle eines Screibens von 0 oder >maxZahl den text löschen soll, aber
1. Sieht man die 0 kurz
2. bei einer größeren zahl wie die maxZahl löscht er das Textfeld wieder
Ich will aber möglichst verhindern dass nicht definierte Werte einzugeben sind, sprich mein Script soll erkennen, dass er bei 0 und >maxZahl nix tun soll und über die Zeicheneinbettung selbst geht das ja leider nicht.
Das einzige was geht udn was bei Datenbank-Abfragen nicht definierbar sein müsste wäre eine komplette Abfrage der hunderter stelle udn einerstellen oder sehe ich das jetzt falsch?
 
Zuletzt bearbeitet:
Hallo,
probier es mal mit Event.CHANGE

KEY_UP wird ja erst dann ausgelöst, wenn man die Taste wieder löslässt. Würde man einfach eine Taste gedrückt halten würde dein Event nie gefeuert werden.
Gruß
 
Wuhu!
Klappt zur Laufzeit tadellos.
Habe mich auch direkt wieder mit beschäftigt und bin auch am Rande meiner NErven mit dem Teil, aber nach langem hin und her klappt das Teil jetzt =)

Also die EIngabe verweigert zu Anfang die Eingabe 0 und auch eine Eingabe die über den maximalen Wert liegt (Im Script grade 19875) wird nicht akzeptiert. Befindet sich der eingegeben Wert allerdings im definierten Zahlenbereich dann soll ein zweites Textfeld erscheinen. Dieses Script ist verallgemeinert für jede beliebige Zahl. Klappt allerdings nur von 0 bis Maximalwert. Und für Wörter klappt es selbstredend auch nicht, aber wer brauch schon ein Textfeld, in dem streng Zeichenfolgen kontrolliert werde? XD
Für Zahlenbereiche klappts auf jeden Fall =)

Muss noch erwähnen, dass die Variabeln hilfTxt udn hilfMax notwendig sind, da dieses Script den Wert im Textfeld nutzt. D.h. damit am Ende keine zusätzliche Zahl einzugeben sein darf und auch am Anfang der EIngabe t, so muss ein Zähler her, der die Zahlenstellen zählt. hilfTxt zählt also udn die hilfMax speichert den Wert im Textfeld zwischen um den bei erneuter Eingabe zu vergleichen.

Hier der Codeschnipsel:

PHP:
schachtel_mc.primaer_txt.addEventListener(Event.CHANGE, einschrieb);

var maxZahl:Number=19875;
var hilfTxt:Number=0;
var hilfMax:Number=0;

function einschrieb(evt:Event):void {

	if (Number(schachtel_mc.primaer_txt.text)>0&&Number(schachtel_mc.primaer_txt.text)<=maxZahl) {
		if (Number(schachtel_mc.primaer_txt.text)>hilfMax) {
			if (Number(schachtel_mc.primaer_txt.text)>=10) {
				hilfMax=Number(schachtel_mc.primaer_txt.text);
				hilfTxt++;
			}
			else {
				hilfTxt=1;
				hilfMax=Number(schachtel_mc.primaer_txt.text);
			}
		}
		if (Number(schachtel_mc.primaer_txt.text)<hilfMax) {
			
			if (Number(schachtel_mc.primaer_txt.text)>=10) {
				hilfMax=Number(schachtel_mc.primaer_txt.text);
				hilfTxt--;

			}
			else {
				hilfTxt=1;
				hilfMax=Number(schachtel_mc.primaer_txt.text);
			}
		}

		boa_mc.gotoAndStop(2);
	}
	
	else {
		
		if (Number(schachtel_mc.primaer_txt.text)==0) {
			schachtel_mc.primaer_txt.replaceText(0,3,"");
			boa_mc.gotoAndStop(1);
		}
		else {
			if (Number(schachtel_mc.primaer_txt.text)>maxZahl) {

				schachtel_mc.primaer_txt.replaceText(hilfTxt,hilfTxt+1,"");
			}
		}
	}
}
 
Zurück