Bestellschein aktualisieren
tomchy
- javascript
Hallo!
Ich bastle gerade an einem Bestellschein. Links wird in einem Formularfeld die Artikelmenge angegeben, zwischendrin ist die Artikelbeschreibung, dann steht der Preis pro Stück und darauf hin kommt wieder ein Formularfeld, das den Gesamtpreis für diesen Artikel anzeigt.
Was muss ich machen, dass nach Eintrag der Menge automatisch der Gesamtpreis für den Artikel aktualisiert wird?
Und wie rechne ich den Gesamtpreis des kompletten Bestellscheins aus?
Und kann man die Zahlen in den Formularfelder auch rechstbündig machen?
Danke für die Infos.
mfg, Tomchy
hi,
Was muss ich machen, dass nach Eintrag der Menge automatisch der Gesamtpreis für den Artikel aktualisiert wird?
schau dir an, wie man mit formularfeldern in JS umgeht.
auf änderungen von feldinhalten reagierst du mit einem eventhandler wie bspw. onChange.
na ja, und wie man in javascript ein bisschen rumrechnet, findest du im grundlagenkapitel über JS.
tipp: das value-attribut von formularfeldern enthält immer strings - aus denen musst du erst zahlen machen, bevor du damit rechnen kannst (parseFloat, parseInt).
Und wie rechne ich den Gesamtpreis des kompletten Bestellscheins aus?
na ja, ich würde sagen, du rechnest die einzelpreise zusammen, hm?
Und kann man die Zahlen in den Formularfelder auch rechstbündig machen?
na klar, mit CSS. ob das allerdings klug ist, ist eine andere frage - bei der eingabe könnte es viele nutzer vermutlich eher verwirren. http://de.selfhtml.org/css/eigenschaften/ausrichtung.htm
gruß,
wahsaga
Und kann man die Zahlen in den Formularfelder auch rechstbündig machen?
na klar, mit CSS. ob das allerdings klug ist, ist eine andere frage - bei der eingabe könnte es viele nutzer vermutlich eher verwirren. http://de.selfhtml.org/css/eigenschaften/ausrichtung.htm
Ja, aber die Zahlen sollten schon rechtsbündig stehen, wenn es um eine Rechnung geht, oder?
mfg, Tomchy
hi,
hab mal schnell was zusammen gerotzt, was ungefähr deinen vorgaben entspricht.
siehst du hier
http://slegdog.de/from
hi,
hab mal schnell was zusammen gerotzt, was ungefähr deinen vorgaben entspricht.
Seeehr nett, daß du dir die Mühe gemacht hast! :-)
Aber der Gesamtpreis(e) wird nicht ausgerechnet, wenn ich die Mengen verändere... Mache ich was falsch?
mfg, Tomchy
hi,
hab doch gesagt "mal schnell was zusammen gerotzt". der firefox hatte es gefressen. habs noch mal überarbeitet der IE mags nun auch, wie es mit anderen Browsern aussieht weiß ich net.
änderung siehe:
http://slegdog.de/from
gruß mysch
Hi Mysch,
hab doch gesagt "mal schnell was zusammen gerotzt". der firefox hatte es gefressen. habs noch mal überarbeitet der IE mags nun auch, wie es mit anderen Browsern aussieht weiß ich net.
Safari geht nicht.
IE meldet "JScript-Laufzeitfehler, Zeile 19, Fehler 5, Objekt unterstützt diese Eigenschaft oder Methode nicht"
Firefox & Netscape ohne Probleme!
mfg, Tomchy
IE ist zum Beispiel nicht mit dieser Zeile zufrieden:
document.formular.ges2.value = wert.toFixed(2);
Hi,
(wie kann man nur an einem Sonntagmorgen derart früh ... ;-)
IE ist zum Beispiel nicht mit dieser Zeile zufrieden:
document.formular.ges2.value = wert.toFixed(2);
Aha, das ist doch mal eine brauchbare Information!
Wahrscheinlich ist es die Methode toFixed(), die ich bei meinem Versuch ersetzt hatte. Mit ein wenig Glück reicht es beides zusammenzuwerfen, probiere also mal den hier:
var pos1 = 3.99;
var pos2 = 2.49;
var pos3 = 2.89;
function getST(obj) {
field = obj.name;
value = checkvalue(obj);
if(field == "st1") {
wert = (pos1 * value);
wert = wert.toString();
wert = wert.slice(0, wert.indexOf('.') + 3);
document.formular.ges1.value = wert.replace(/\./,",");
}
if(field == "st2") {
wert = (pos2 * value);
wert = wert.toString();
wert = wert.slice(0, wert.indexOf('.') + 3);
document.formular.ges2.value = wert.replace(/\./,",");
}
if(field == "st3") {
wert = (pos3 * value);
wert = wert.toString();
wert = wert.slice(0, wert.indexOf('.') + 3);
document.formular.ges3.value = wert.replace(/\./,",");
}
val1 = parseFloat(document.formular.ges1.value.replace(/,/,"."));
val2 = parseFloat(document.formular.ges2.value.replace(/,/,"."));
val3 = parseFloat(document.formular.ges3.value.replace(/,/,"."));
wert = val1 + val2 + val3;
wert = wert.toString();
wert = wert.slice(0, wert.indexOf('.') + 3);
document.formular.gesamt.value = wert.replace(/\./,",");
}
function checkvalue(obj) {
getvalue = eval("document.formular."+obj.name);
for(i=0; i<10; i++) {
if(getvalue.options[i].selected) {
return parseInt(getvalue.options[i].text);
}
}
}
so short
Christoph Zurnieden
H!
Jetzt geht es nirgends mehr. :-(
mfg, tomchy
Hi,
Jetzt geht es nirgends mehr. :-(
Da es hier in Mozilla und dem Konqueror funktioniert und ... Moment ... Opera (6.0 Beta 1 for SuSE) nehme ich an, das uns lediglich irgendwo C&P einen Streich gespielt hat. Mehr kann ich nicht sagen, denn "geht nicht" ist keine vernünftige Fehlermeldung. Da kann man rein gar nichts mit anfangen außer eben der Vermutung das da irgendetwas beim C&P danebenging. Bitte laß Dir nicht derart die Würmer aus der Nase ziehen und sei etwas gesprächiger, danke.
so short
Christoph Zurnieden
Hallo mysch,
habe nun alles durchprobiert: der Code geht nicht in Safari und IE 5.2, aber in Netscape und Firefox funktioniert es. Hast du ne Ahnung, warum?
mfg, Tomchy
Hi,
habe nun alles durchprobiert: der Code geht nicht in Safari und IE 5.2, aber in Netscape und Firefox funktioniert es. Hast du ne Ahnung, warum?
Er vielleicht nicht aber ich. Ein Ahnung zumindest ;-)
Den Browsern nach treibst Du Dich auf einem Mac rum? Welche Version hat der Safari? Ist das auch die Mac-Version vom IE?
Es wurde einmal ein Javascript-1.5 Konstrukt benutzt (toFixed()), das könnte Ärger machen, obwohl es vom IE ab Version 5 unterstützt werden soll. Ich kann das augenblicklich nicht kontrollieren, ist die Angabe von SELFHTML. Bei Safari mußte ich jedoch etwas stutzen. Selbst bei meinem ältlichem Konqueror (3.2.1) funktioniert es.
Könntest ja mal das Konstrukt versuchen, ist auch eine kleine kosmetische Verbesserung drin.
var pos1 = 3.99;
var pos2 = 2.49;
var pos3 = 2.89;
function getST(field, value) {
if(field == "st1") {
wert = (pos1 * value);
wert = wert.toString();
wert = wert.slice(0, wert.indexOf('.') + 3);
document.formular.ges1.value = wert.replace(/\./,",");
}
if(field == "st2") {
wert = (pos2 * value);
wert = wert.toString();
wert = wert.slice(0, wert.indexOf('.') + 3);
document.formular.ges2.value = wert.replace(/\./,",");
}
if(field == "st3") {
wert = (pos3 * value);
wert = wert.toString();
wert = wert.slice(0, wert.indexOf('.') + 3);
document.formular.ges3.value = wert.replace(/\./,",");
}
val1 = parseFloat(document.formular.ges1.value.replace(/,/,"."));
val2 = parseFloat(document.formular.ges2.value.replace(/,/,"."));
val3 = parseFloat(document.formular.ges3.value.replace(/,/,"."));
wert = (val1 + val2 + val3);
wert = wert.toString();
wert = wert.slice(0, wert.indexOf('.') + 3);
document.formular.gesamt.value = wert.replace(/\./,",");
}
so short
Christoph Zurnieden
Den Browsern nach treibst Du Dich auf einem Mac rum? Welche Version hat der Safari?
Safari geht jetzt, danke!
Ist das auch die Mac-Version vom IE?
Die geht noch nicht.
mfg, tomchy
Der IE meldet: JScript-Laufzeitfehler
Fehler: Objekt erwartet
Hi,
Der IE meldet: JScript-Laufzeitfehler
Fehler: Objekt erwartet
Immer diese wahnsinnig aufschlußreichen Fehlermeldungen, vor allem des IE *sigh*
Oder gibt's da doch noch eine Zeilenummer damit man die passende Zeile zuordnen kann?
so short
Christoph Zurnieden
Hi,
Immer diese wahnsinnig aufschlußreichen Fehlermeldungen, vor allem des IE *sigh*
Oder gibt's da doch noch eine Zeilenummer damit man die passende Zeile zuordnen kann?
Nix dergleichen unterm Mac. Wo schaltet man unter Win das Javascript Protokoll ein?
mfg, Tomchy
Hi,
Nix dergleichen unterm Mac. Wo schaltet man unter Win das Javascript Protokoll ein?
Aus dem Stand: keine Ahnung, bin ich ehrlich ;-)
Aber mysch hat seine Code entsprechend geändert versuche den mal im Safari. Falls es da immer noch nicht klappt kann ich das entsprechend ändern, so Du hinter myschs Workaround nicht ganz hintersteigst. Ist ja schließlich extra für den IE von hinten durch die Brust in's Auge ;-}
so short
Christoph Zurnieden