Summenberechnung
Tom6
- javascript
0 Tom60 Tom6
Hallo!
Ich verwende ein Bestellformular für eine Pizza :-)
Der User hat die Möglichkeit, 5 Zutaten einzeln zu bestellen. Das Ergebnis Summe wird am Ende aufgeführt.
Nun bekommt der User die Möglichkeit, das Gesamtpkaet "Pizza Speziale" auszuwählen.
Wenn er dies tut, ist der Preis ermäßigt.
So sieht mein Script bislang aus:
<script type="text/javascript">
function addition(el,wert){
var summe = 0; // Anfangsbetrag
el.value2=wert;
var liste = el.form[el.name]; // Die Liste aller Checkboxen mit dem Namen
for(var i = 0; i < liste.length; i++)
summe += (liste[i].checked && liste[i].value2) ? liste[i].value2 : 0;
el.form.result.value = summe.toFixed(2);
}
</script>
Nun müsste ich das Script wie folgt umbauen, oder? Eine Abfrage, ob Summe größer ist als 10,00 EUR (Preis für ermäßigte Gesamtpizza). Wenn ja, ist Summe 10,00 EUR. Wenn der Preis geringer ist, soll die korrekte Addition angezeigt werden. Wenn der Gesamtpreis 10,00 EUR beträgt und eine der Zutaten wird entfernt, muss vom korrekten Preis die Zutat subtrahiert werden, nicht aber von den 10,00 EUR.
Ich hoffe, mir kann jemand mit der Syntax helfen.
Danke, Thomas
OK, ich hab das Problem nun selbst durch eine einfache If Anweisung gelöst:
if (summe < 10) {
el.form.result.value = summe;
} else {
el.form.result.value = 10;
}
Eine Frage noch:
In einer anderen Funktion werden beim aktivieren der Checkbox "Gesamtpizza" alle andren Haken aktiviert.
Wenn nun einer erst Geamtpizza auswählt, dann aber eine Zutat entfernt, soll automatisch auch der Haken Geaamtpizza verschwinden, wie kann ich das bewerkstelligen?
Grüße, Thomas
@@Tom6:
nuqneH
soll automatisch auch der Haken Geaamtpizza verschwinden, wie kann ich das bewerkstelligen?
So wie in 2 aktuellen Threads hier im Forum gesagt. Die solltest du mal "check"en (pun intented!).
Dass eine Formularauswertung immer servwerseitg erfolgen muss und clientseitige Vorverarbeitung nur eine zusätzliche Option darstellt, ist dir bewusst?
Qapla'
Na gut, soweit funktioniert nun alles, nur eines kapier ich nicht. aber langsam krieg ich einen Überblick über JS
Ich verwende jetzt zwei Funktionen:
Die erste berechnet mir die Summe und wirft Sie als result aus:
function addition(el,wert){
var summe = 0;
el.value2=wert;
var liste = el.form[el.name]; // Die Liste aller Checkboxen mit dem Namen
for(var i = 0; i < liste.length; i++)
summe += (liste[i].checked && liste[i].value2) ? liste[i].value2 : 0;
el.form.result.value = summe;
if (summe < 10) {
el.form.result.value = summe;
} else {
el.form.result.value = 10;
document.form1.mod_all.checked = true;
}
}
</script>
Die zweite Funktion aktiviert bei anklicken von Gesamtpizza alle Checkboxen und setzt den Wert Summe auf 10.
<script type="text/javascript">
function aktiv()
{
if(document.form1.mod_all.checked==true)
{
for(var i=0; i<document.form1.elements.length; i++)
document.form1.elements[i].checked = true;
document.form1.result.value = 10;
}
if(document.form1.mod_all.checked==false)
{
for(var i=0; i<document.form1.elements.length; i++)
document.form1.elements[i].checked = false;
document.form1.result.value = 0;
}
}
</script>
Wird nun aber ein Haken entfernt, wird nicht von 10 subtrahiert. Da brauch ich noch Hilfe, bitte.
Grüße, Thomas
@@Tom6:
nuqneH
Nebenbei:
function aktiv()
{
if(document.form1.mod_all.checked==true)
Der Vergleich gegen true
ist unsinnig.
if(document.form1.mod_all.checked==false)
Die Abfrage ist unsinnig, denn die hast du bereits (negiert) durchgeführt. Das wäre also der else
-Zweig der vorigen if
-Abfrage.
Qapla'
Das leuchtet ein, danke.
Aber wie kann ich es anstellen, dass die Summe von Gesamtpizza korrekt abgezogen wird?
Hallo,
Aber wie kann ich es anstellen, dass die Summe von Gesamtpizza korrekt abgezogen wird?
Rechne einfach immer nur mit der realen Summe und trage erst am Ende den Endpreis ins Feld ein. Der errechnet sich am einfachsten mit Math.min(summe,10)
Wenn eine Zutat wieder zu entfernt wird, ziehe diese von der realen Summe ab und lege dann erneut den Endpreis mit Math.min(summe,10)
fest.
Gruß, Don P
Dieser Codeschnipsel macht mir noch Probleme:
Es werden bei anhaken der Gesamtsumme ja alle Checkboxen aktiviert und die Summe festgelegt.
Nun müsste der folgende Code bei "deaktivieren" einer Checkbox von der Summe subtrahieren. Hier muss ich aber erst aktivieren,hier muss ich aber erst deaktivieren, dann aktivieren und er rechnet wieder drauf.
for(var i = 0; i < liste.length; i++)
summe += (liste[i].checked && liste[i].value2) ? liste[i].value2 : 0;
el.form.result.value = summe;