Geht das mit Javascript?

Hallo,

nach Euren Empfehlungen von vor ein paar Tagen habe ich nun mit Javascript angefangen. Allerdings hänge ich jetzt an einem Problem:

Bei dem untenstehen kleinen Programmchen wird bei Klick auf Umrechnen der Wert im Feld DM in Euro umgerechnet und angezeigt. Kein Problem.

Ich habe aber schon die zweite Funktion erstellt, die Euro in DM umrechnet.

Und nun möchte ich, daß bei Klicken auf Umrechnen der Wert, der zuletzt in eines der beiden Felder eingegeben wurde, in die jeweils andere Währung umgerechnet wird.
Das Programm müßte also irgendwie sich merken, welches Feld geändert wurde, und dementsprechend eine der beiden Funktionen aufrufen.

Geht das? Habt ihr einen Tip für einen Anfänger?

Danke im voraus

Test
<!–
function DM_EU()
{
var EU = (document.Formular.DM.value)/1.95583;
EU=parseInt(EU*100+0.5)/100;
document.Formular.Euro.value=EU;
}

function EU_DM()
{
var DMark = (document.Formular.Euro.value)*1.95583;
DMark=parseInt(DMark*100+0.5)/100;
document.Formular.DM.value=DMark;
}
//–>

DM

EU

Hallo,
du kannst in der beide input felder auf der änderung mit onchange reagieren und info ob du DM oder EURO speichern.
beim button click rufst du zuerst eine funktion in der du die abfrage nach info fragt und je nachdem rufst dm_euro oder euro_dm auf.

ich habe dir schnel einen sript gebaut(vielleicht funktioniert noch nicht ganz richtig) da kannst ihn vielleicht benutzen

Test
<!–

var waerung1;

function change(waerung)
{
waerung1 = waerung;
}

function umrechnen()
{
if (waerung1 == „DM“)

{
DM_EU();

}
else
{
EU_DM();
}
}

function DM_EU()
{
var EU = (document.Formular.DM.value)/1.95583;
EU=parseInt(EU*100+0.5)/100;
document.Formular.Euro.value=EU;
}

function EU_DM()
{
var DMark = (document.Formular.Euro.value)*1.95583;
DMark=parseInt(DMark*100+0.5)/100;
document.Formular.DM.value=DMark;
}
//–>

DM

EU

youssef

Hallo Youssef,

ich versuche das mal, Stichwort onchange bringt mich schon weiter.

Danke
Dan

… und noch 'ne Version

\<!--

 // changeObj ist ein Javascript Objekt das alle Daten (Eigenschaften) und Methoden (Funktionen) für die Aufgabe enthält
 changeObj=
 {
 // currency hält die Währung die auch gleich die Kennung des Input-Objekts ist
 currency:''
 // value hält einfach den Wert der in das Eingabefeld eingegeben wurde, EUR und DM die entsprechend berechneten Werte
 ,value:0
 ,EUR:0
 ,DM:0
 // setChange ist eine Methode die die Daten aus den Input-Elementen in das Objekt überträgt
 ,setChange:function(obj)
 {
 this.currency=obj.id
 // parseFloat wandelt die Zeichenkette aus dem Input-Element (immer eine Zeichenkette) in eine Zahl um
 // this bezieht sich immer auf das aktuelle Objekt im Input-Element also auf das Objekt des Input Elements
 // und hier auf das Objekt in dem sich die Methode befindet -\> changeObj. 
 this.value=parseFloat(obj.value)
 }
 ,calcChange:function()
 {
 switch(this.currency)
 {
 case 'DM':
 // Rundung auf 2 Stellen hinter dem Komma,
 this.value=Math.round(this.value\*100)/100
 // Nette Ausgabe für das aktuelle Eingabefeld erstellen...
 document.all.DM.value=this.value.toFixed(2)+' DM'
 this.EUR=Math.round(this.value/0.0195583)/100
 document.all.EUR.value=this.EUR.toFixed(2)+' €'
 break;
 case 'EUR':
 // Rundung auf 2 Stellen hinter dem Komma,
 this.value=Math.round(this.value\*100)/100
 // Nette Ausgabe für das aktuelle Eingabefeld erstellen...
 document.all.EUR.value=this.value.toFixed(2)+' €'
 this.DM=Math.round(this.value\*195.583)/100
 document.all.DM.value=this.DM.toFixed(2)+' DM'
 break;
 }
 }
 }
//--\>

Den Button kann man sich auch noch sparen wenn man dei Berechnung direkt in der onChange-Ereigniss-Behandlungs-Methode :wink: aufruft…

[...]
 ,setChange:function(obj)
 {
 this.currency=obj.id
 // parseFloat wandelt die Zeichenkette aus dem Input-Element (immer eine Zeichenkette) in eine Zahl um
 // this bezieht sich immer auf das aktuelle Objekt im Input-Element also auf das Objekt des Input Elements
 // und hier auf das Objekt in dem sich die Methode befindet -\> changeObj. 
 this.value=parseFloat(obj.value)
 this.calcChange()
 //^^^^^^^^^^^^^
 }
[...]

Grüße
T.

Danke und noch eine Frage
Hallo Youssef und Temper,

vielen Dank für Eure umfangreiche Hilfe. Es geht super, und nachdem ich Eure Codes mal richtig durchgekaut habe, ist jetzt alles klar mit JS. Ist ja echt einfach.

Aber noch eine Frage: 3,21 Euro muß ich mit Punkt eingeben. Gibt es eine Möglichkeit, das Dezimalzeichen global auf Komma umzustellen, oder muß ich das im eingelesenen String von Komma auf Punkt ändern, damit damit gerechnet werden kann?

Danke und viele Grüße
Dan

Aber noch eine Frage: 3,21 Euro muß ich mit Punkt eingeben.
Gibt es eine Möglichkeit, das Dezimalzeichen global auf Komma
umzustellen, oder muß ich das im eingelesenen String von Komma
auf Punkt ändern, damit damit gerechnet werden kann?

Am schnellsten geht ein Replace mit regulären Ausdrücken (/…/).

//Zuweisung an 'wert' als Zeichenkette
wert='3.21'
// der/die Punkte werden gesucht '/\./g' und gegen das Komma getauscht
// die Ausgabe sollte '3,21' sein
alert(wert.replace(/\./g,','))

//Zuweisung an 'wert' als Zahl
wert=3.21
//'wert' wird in eine Zeichenkette umgewandelt
wert=wert.toString()
// die Ausgabe sollte wieder '3,21' sein
alert(wert.replace(/\./g,','))

wert='3,21'
// die Ausgabe sollte '3.21' sein
alert(wert.replace(/,/g,'.'))

wert=3,21 würde einfach nur die Zahl 3 der Variablen zuweisen (die 21 geht verlohren). Das Komma trennt in JS einzelne Kommandos und ist nicht zur Darstellung von Zahlen geeignet.

Grüße
T.

Aber noch eine Frage: 3,21 Euro muß ich mit Punkt eingeben.
Gibt es eine Möglichkeit, das Dezimalzeichen global auf Komma
umzustellen, oder muß ich das im eingelesenen String von Komma
auf Punkt ändern, damit damit gerechnet werden kann?

Am schnellsten geht ein Replace mit regulären Ausdrücken
(/…/).

obacht: danach ist der string immer noch ein string. ein parsefloat o.ä. muss da schon noch dahinter…