Formular zusammen rechnen *verzweifel*
|
Seitenanfang |
| Ich bin ja ein lösungssucher hab jetzt die letzten 2 tage im www gesucht aber nun kann ich nicht mehr alles was ich gefunden habe, hab ich nicht verstanden... parseInt + parseflot + string um und zurückwandeln, komma in punkt um und zurück wandeln, ist zu viel für mich und meinem erbsen grossem gehirn. <script type="text/javascript"> function berechnung(){ var npreis = "12,30" ; //wert wird aus einer datenbank eingefügt. Normalerweise ist dort ein platzhalter. var anzahl = document.muster.anzahl.value; var art = document.muster.versandart.value; ergebnis = npreis * anzahl + art; document.muster.gesamtbetrag.value = ergebnis ; } </script> so sollte es eigentlich verständlich sein was ich möchte, mag einer der ein grösseres hirn als ich hab mir mal helfen. bitte bitte .... biiitttteee gruss atilla
Datum: 08.02.2005-14:31

|
re: Formular zusammen rechnen *verzweifel*
|
Seitenanfang |
| Hallo Atilla, eigentlich ist es besser, Dezimalzahlen-Werte aus der Datenbank gleich mit Punkt anstelle eines Kommas einzutragen, ansonsten Komma austauschen z.B. so, weil's in jedem Browser funktioniert:
var i = npreis.indexOf(","); if (i >= 0) { npreis = npreis.substring(0,i)+'.'+npreis.substr(i+1,99); }
Wenn Du mit Texten rechnen willst, mußt Du das Javascript mitteilen, deshalb schreibe:
var ergebnis = eval(npreis)*eval(anzahl)+eval(art);
Besser wäre allerdings eine gründliche Prüfung der Formularfelder, wobei anstelle von eval() dann parseFloat() zum Einsatz kommt z.B.:
if (isNaN(anzahl) == true) { // ist keine Zahl anzahl = 1; // Anzahl einfach auf 1 setzen document.muster.anzahl.value = 1; // oder Fehler melden // alert('Anzahl falsch!'); // und Cursor in das Formularfeld setzen // document.muster.anzahl.focus(); } else { // Text in Float umwandeln anzahl = parseFloat(anzahl); }
Danach kannst Du die Variable anzahl direkt zum Multiplizieren verwenden, also ohne eval().
Datum: 08.02.2005-21:35

|
re: Formular zusammen rechnen *verzweifel*
|
Seitenanfang |
Hier kommt Dein fertiges Script. Du wirst aber nicht umhin kommen, Dich mit der Problematik etwas mehr zu beschäftigen. Wer nimmt mir denn meine Arbeit ab?
<script type="text/javascript"> var ok = true; // hier Fehlerstatus merken // wenn ok = false, Berechnung abbrechen function berechnung() { var npreis = "12,30" ; // Wert wird aus einer Datenbank eingefuegt. var anzahl = document.muster.anzahl.value; var art = document.muster.versandart.value; npreis = text2float(npreis,false); anzahl = text2float(anzahl,document.muster.anzahl); art = text2float(art,document.muster.versandart); if (ok == true) { // Berechnung nur durchfuehren, wenn alle drei // Texte erfolgreich in Float (Zahlen) umgewandelt werden konnten var ergebnis = npreis*anzahl+art; document.muster.gesamtbetrag.value = ergebnis; } } function text2float(txt,feld) { // Text in Zahl umwandeln // der erste Parameter enthaelt den Text mit der Zahl // der zweite Parameter enthaelt das Objekt fuer den // Ruecksprung nach einer entsprechenden Fehlermeldung var i = txt.indexOf(","); // Position vom Komma bestimmen // Komma durch Punkt ersetzen, wenn ein Komma vorhanden war if (i >= 0) txt = txt.substring(0,i)+'.'+txt.substr(i+1,99); if (isNaN(txt) == true) { // der Text ist keine Zahl if (feld) { // Fehler bezieht sich auf ein Formularfeld alert('Bitte geben Sie hier eine gültige Zahl ein!'); feld.focus(); // Cursor in dieses Formularfeld setzen ok = false; // Berechnung in berechnung() abbrechen txt = 1; // sicher ist sicher, Wert wird nicht verwendet } else { // Fehler kommt aus der Datenbank txt = 1; // Wert z.B. einfach auf 1 setzen // hier sollte das Programm eigentlich nie vorbeikommen } // end else if } else { // Text ist eine gueltige Zahl txt = parseFloat(txt); // Text in Float umwandeln } // end else if return txt; // gibt immer einen Float-Wert zurueck } // end function text2float </script>
Datum: 09.02.2005-08:40

|
re: Formular zusammen rechnen *verzweifel*
|
Seitenanfang |
| wenn ich was fertiges habe kann ich es ausseinander nehmen (meistens) und alles was ich auseinander nehme kann ich auch wieder zusammen bauen und verstehen, dauert manchmal ein wenig aber dafür sind die ahhhhh's um soviel schöner vielen dank !!
Datum: 09.02.2005-11:44

|
re: Formular zusammen rechnen *verzweifel*
|
Seitenanfang |
| Hallo mall ein kleinen Anschub in deine Sache Routine "." in "," aufgerufen wird so was in - PreisText(npreis) oder Prüfung ( Anzeige ) - alert (PreisText(npreis)); MFG Tron function PreisText(wert) { var text = wert + ""; var punkt = text.indexOf("."); if (punkt < 0) text += ".00"; else if(punkt == 0) text = "0" + text; text += "00"; punkt = text.indexOf("."); text = text.substring(0,punkt + 3); return text; }
Datum: 08.02.2005-21:41

|
re: Formular zusammen rechnen *verzweifel*
|
Seitenanfang |
| Danke! doch jetzt bin ich noch mehr verwirrt... Mag mir einer die beiden post und meins zu einem komplett ding zusammen fügen. bei mir kommt nur mist raus. <mitdermausständiggegenmeinenkopfhau>
Datum: 08.02.2005-22:41

|
re: Formular zusammen rechnen *verzweifel*
|
Seitenanfang |
hallo atilla, <html><head> <script language="JavaScript" type="text/javascript"> function berechnung(){ var npreis = "12,30"; npreis=npreis.replace(",","."); var anzahl = document.muster.anzahl.value; var art = parseFloat(document.muster.versandart.value); var ergebnis = npreis * anzahl + art; ergebnis = ergebnis.toFixed(2); ergebnis=ergebnis.replace(".",","); document.muster.gesamtbetrag.value = ergebnis ; } </script> </head> <body> <form name="muster" id="muster"> Anzahl : <input name="anzahl" type="text" id="anzahl" size="5"><br> Versand: <select name="versandart" id="versandart3"> <option value="0.55">Brief</option> <option value="1.44">Großbrief</option> </select><br> <br> <input name="berechnen" type="button" id="berechnen" value="Berechnen" onClick="berechnung()"> <br><br>Summe:<input name="gesamtbetrag" type="text" id="gesamtbetrag"> </form> </body></html>
gruß stef
Datum: 09.02.2005-09:08

|
re: Formular zusammen rechnen *verzweifel*
|
Seitenanfang |
| Also ich muss mich jetzt mal ehrlich bei euch bedanken funktioniert super und nun scheine ich das auch zu verstehen.. glaub ich zumindest danke schön an euch drei !! gruss atilla
Datum: 09.02.2005-11:30

|