HTML Formular Rechenfunktion
| Beiträge: 478 Registriert: Aug 2007
| 13.09.2010, 18:21
Also, ich habe ein HTML Formular in dem ich 15 Zeilen habe mit Feldern. Ich möchte das er mir das Feld Menge / VE * Einzelpreis multipliziert den Rabatt den ich im Feld Rabatt eingebe (in %) abzieht und im Feld Gesamt das Ergebnis ausgibt. Dann sollten alle Gesamt-Felder addiert werden und im Feld Zwischensumme addiert werden, dann noch +20% MwSt im Feld Mwst dazugezählt werden im um Feld Gesamtbetrag der Gesamtbetrag ausgegeben werden. Das alles mit JS
Das ganze sollte aber nicht auf Klick geschehen sonder während der Eingabe.
Kann mir da jemand helfen? Hab mein .zip angehängt, ist eine einfach HTML Datei mit CSS formatiert.
Bin für eine Hilfe sehr dankbar!
Angehängte Dateien:
| | | Beiträge: 579 Wohnort: Halle Registriert: Apr 2005
| 14.09.2010, 09:05
Hallo,
in JavaScript gibts dafür das onchange-Event, was du einfach den Input-Feldern, bei deren "Veränderung" die Berechnungen ausgeführt werden sollen, zufügst. Also
PHP:1 2
|
<input type="text" name="name_des_felds" onchange="berechne()" />
|
Die beim Auftreten des Events onchange aufgerufene Funktion berechne() ist dann relativ einfache Mathematik und ist von ihrer Syntax nahezu mit ActionScript identisch. onchange heißt übrigens nicht, dass jedesmal die Funktion aufgerufen wird, wenn du eine weitere Zahl im Textfeld eingibst, sondern wenn du den Inhalt des Textfelds änderst und dann zu einem anderen Textfeld wechselst.
Oder kommst du eben mit genau diesem JavaScript nicht weiter?
Patrick_________________________________________________________
Um Rekursion wirklich zu verstehen, muss man zuerst Rekursion verstehen.
null != 'null' != 0 != '0' | Geändert von Sleepingbeast am 14.09.10 um 09:27 Uhr | |
| | Beiträge: 478 Registriert: Aug 2007
Themenautor/in
| 14.09.2010, 17:03
Hey, danke für deine Antwort!
Die onChange Funktion ist nicht das Problem. Eher das Rechnen.
In Flash ist es für mich kein Problem.
Dort mach ich z.B.
ActionScript:1 2 | gesamt1= wert01*wert02;
gesamt2 = wert03*wert04;
|
und z.B. mit interval oder onChange oder onEnterFrame die ständige Berechnung...
Bei JS kenn ich mich nicht so aus... | | | Beiträge: 579 Wohnort: Halle Registriert: Apr 2005
| 15.09.2010, 12:11
Ich "erklär" mal kurz das Grundprinzip.
Wie ich gesehen habe, hast Du die name-Attribute deiner Input-Felder durchnummeriert (außer menge1, das solltest Du noch machen). Mit JavaScript kannst Du nun unter anderem über diese name-Attribute auf die Inhalte der einzelnen Input-Felder zugreifen.
In jedes der Input-Felder, deren Inhalte bei einer Änderung in die Berechnung mit einfließen sollen, schreibst Du onchange="berechne(X)". Das X steht für die Zahl der jeweiligen Zeile. Also für alle Input-Felder der ersten Zeile onchange="berechne(1)", die der zweiten Zeile onchange="berechne(2)" usw.
Beispiel:
ActionScript:1 | <input name="menge1" type="text" class="input_3" id="textfield91" onchange="berechne(1)">
|
Somit wird bei jeder Änderung des Inhalts die Funktion berechne() mit der entsprechenden Zeilenzahl als Parameter übergeben.
Die Funktion selbst schreibst du dann entweder im head-Bereich deiner HTML-Datei oder besser noch in eine separate js-Datei.
Sie könnte dann ungefähr so aussehen:
PHP:1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27
|
function berechne(NR) {
var menge = document.getElementsByName('menge' + NR)[0].value;
var einzelpreis = document.getElementsByName('einzelpreis' + NR)[0].value;
var rabatt = document.getElementsByName('rabatt' + NR)[0].value / 100 * menge * einzelpreis;
var betrag = menge * einzelpreis - rabatt;
document.getElementsByName('betrag' + NR)[0].value = betrag;
var zwischensumme = '';
var umsatzsteuer = '';
var gesamt = '';
for(var i = 1; i <= 15; i++ ) {
zwischensumme += document.getElementsByName('betrag' + i)[0].value;
}
document.getElementsByName('zwischen')[0].value = zwischensumme;
umsatzsteuer = zwischensumme * 0.2;
document.getElementsByName('mwst')[0].value = umsatzsteuer;
gesamt = parseFloat(zwischensumme) + parseFloat(umsatzsteuer);
document.getElementsByName('gesamt')[0].value = gesamt;
}
|
Wichtig ist hierbei, dass Du (genau wie in ActionScript) Kommas als Punkte eingeben musst, damit der eingegebene Wert auch als Fließkommazahl erkannt wird. Schreibst Du ein Komma, geht JavaScript von einem String aus, mit dem er natürlich nicht rechnen kann. Da kannst Du Dir aber auch eine kleine "Komma zu Punkt"-Funktion schreiben, die ein Komma automatisch in einen Punkt umwandelt. Zusätzlich wären auch noch ein paar Verschönerungssachen denkbar, so dass eine Summe auch in einem Währungsformat ausgegeben wird (also statt 14 dann 14,00).
Ich hoffe, das bringt Dich schonmal ein bisschen weiter. Ansonsten meld Dich einfach nochmal.
Patrick_________________________________________________________
Um Rekursion wirklich zu verstehen, muss man zuerst Rekursion verstehen.
null != 'null' != 0 != '0' | | | Beiträge: 478 Registriert: Aug 2007
Themenautor/in
| 15.09.2010, 15:05
Hey, danke. Das hat mir geholfen. Ich werds mir am Abend noch genauer anschauen, aber das sieht schon sehr hilfreich aus.
Vielen lieben Dank Patrick! | | | Beiträge: 579 Wohnort: Halle Registriert: Apr 2005
| 15.09.2010, 15:32
Gern geschehen,
kann sein, dass sich der ein oder andere Fehler eingeschlichen hat. Werd eventuell auch noch n bissl dranrumbasteln, denn ich hatte vor ner Weile ein ähnliches Projekt, bei dem eine Rechnung genereirt werden sollte.
Patrick_________________________________________________________
Um Rekursion wirklich zu verstehen, muss man zuerst Rekursion verstehen.
null != 'null' != 0 != '0' | | | Beiträge: 478 Registriert: Aug 2007
Themenautor/in
| 22.09.2010, 21:14
Hallo Patrick!
Dein Skript funktioniert super. Habe nur noch ein Problem. Bei der Addition (Zwischensumme) werden die Werte aneinander gereiht und nicht addiert...
Habe es mit parseInt() versucht, hat aber leider nichts gebracht. Irgendwo hab ich noch einen Wurm drin. Vielleicht magst du mir noch einmal helfen.
Bin sehr dankbar!
ActionScript:1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 | <script type="text/javascript">
function berechne(NR) {
var menge = document.getElementsByName('menge' + NR)[0].value;
var einzelpreis = document.getElementsByName('einzelpreis' + NR)[0].value;
var rabatt = document.getElementsByName('rabatt' + NR)[0].value / 100 * menge * einzelpreis;
var betrag = menge * einzelpreis - rabatt;
document.getElementsByName('betrag' + NR)[0].value = betrag;
var zwischensumme = '';
var umsatzsteuer = '';
var gesamt = '';
for(var i = 1; i <= 15; i++ ) {
zwischensumme += document.getElementsByName('betrag' + i)[0].value;
}
document.getElementsByName('zwischen')[0].value = zwischensumme;
umsatzsteuer = zwischensumme * 0.2;
document.getElementsByName('mwst')[0].value = umsatzsteuer;
gesamt = parseFloat(zwischensumme) + parseFloat(umsatzsteuer);
document.getElementsByName('gesamt')[0].value = gesamt;
}
</script>
|
| | | Beiträge: 1004 Registriert: Jul 2008
| 22.09.2010, 21:47
Hallo,
versuch es mal mit:
PHP:1 2 3 4
|
for(var i = 1; i <= 15; i++ ) {
zwischensumme += Number(document.getElementsByName('betrag' + i)[0].value);
}
|
Grüße,
KerstinWer Rechtschreibfehler findet, darf sie gerne behalten. | | | Beiträge: 478 Registriert: Aug 2007
Themenautor/in
| 22.09.2010, 22:48
Danke für deine Antwort aber leider funktioniert es so nicht | |
| Ähnliche Beiträge zum Thema | 29.10.2019 - Theodorich 18.03.2021 - daris |
|
Flashhilfe.de Flash Platform Tipps & Tutorials Flash Platform Andere Programmiersprachen Jobangebote Diskussionen
Flashhilfe News 
Regeln & Bedingungen
|