Radio-Buttons - Summe addieren und subtrahieren

Zenti

Erfahrenes Mitglied
Guten Abend liebe Tutorials Gemeinde,..
Mein erster Beitrag ist gleich mal eine Frage *schäm*.

Und zwar schreibe ich zurzeit ein kleines Bestellsystem in dem es Checkboxen und Radio Buttons gibt.
Das Ziel ist, 2 fix Preise auszugeben.. einmal mit den Radio Buttons und einmal mit den Checkboxen.

Javascript:

PHP:
<script type="text/javascript">

preisA = 0
preisB = 0


// FUNKTION FÜR CHECKBOX

function math_checkbox(objCheckbox){
  // Falls die Checkbox deaktiviert wurde
  if(objCheckbox.checked == false){
    // Subtrahieren
    preisA = preisA - Number(objCheckbox.alt);
  }else{
    // Addieren
    preisA = preisA + Number(objCheckbox.alt);
  }
  // Neu berechneten Preis in Textfeld ausgeben
  document.Bestellung.txtOut_checkbox.value = preisA;
}


// FUNKTION FÜR RADIO

function math_radio(objRadio){
  // Falls die Checkbox deaktiviert wurde
  if(objRadio.checked == false){
    // Subtrahieren
    preisB = preisB - Number(objRadio.alt);
  }else{
    // Addieren
    preisB = preisB + Number(objRadio.alt);
  }
  // Neu berechneten Preis in Textfeld ausgeben
  document.Bestellung.txtOut_radio.value = preisB;
}

</script>


Das HTML Formular:

HTML:
<form name="Bestellung" action="" method="" target="">

    <div><h3>Domain Regestrierung:</h3></div>
    <div><input type="radio" onclick="math_radio(this);" name="radio" id="radio_01" value="test_04" alt="20" />Ja (20,-€)</div>
    <div><input type="radio" onclick="math_radio(this);" name="radio" id="radio_02" value="test_05" alt="0" />Nein (0,-€)</div>
    
    <br />

    <div><h3>Erweiterungen:</h3></div>
    <div><input type="checkbox" onclick="math_checkbox(this);" name="checkbox_01" value="test_01" alt="25" />Kontaktformular (25,-€)</div>
    <div><input type="checkbox" onclick="math_checkbox(this);" name="checkbox_02" value="test_02" alt="30" />Bildergallerie (30,-€)</div>
    <div><input type="checkbox" onclick="math_checkbox(this);" name="checkbox_03" value="test_03" alt="40" />Social Bookmarking (40,-€)</div>
    
    <br />
    <br />

    <div>Einmalige Kosten: <input type="text" name="txtOut_checkbox" value="0" /></div>
    <div>Jährliche Kosten: <input type="text" name="txtOut_radio" value="0" /></div>
  
</form>


Mein Problem ist:
Wenn ein Radio Button aktiviert wird, rechnet er ganz normal den Wert der im "alt" tag steht dazu, doch wenn der andere Radio Button aktiviert wird
(mit anderem Preis) wird der vorherige Wert nicht subtrahiert. Bei den Checkboxen funktioniert das einwandfrei. Liegt warscheinlich daran das die
Radio Buttons in der gleichen Gruppe liegen :confused:

Würde mich sehr über Hilfestellung und Tips freuen.

mit freundlichen Grüßen,
*Zenti

ps.: Bevor jemand frägt, ich benutze das "alt" Tag zum auslesen da ich die "Value" mit den Produkten benenne und diese an meine E-Mail Adresse versendet werden.
 
Hi,

willkommen im Forum.

Speicher das übergebene und abgearbeitete Radio-Objekt in einer Variablen. Diese verwendest du zum Prüfen, ob ein "altes" Objekt existiert. Im Erfolgsfall subtrahierst du dessen Wert.

Beispiel:
Code:
// FUNKTION FÜR RADIO
var objRadioSave = null;

function math_radio(objRadio){
  // Falls eine gespeicherte Checkbox existiert
  if(objRadioSave != null){
    // Subtrahieren
    preisB = preisB - Number(objRadioSave.alt);
  }

  // Addieren
  preisB = preisB + Number(objRadio.alt);
  // Abgearbeitete Checkbox speichern
  objRadioSave = objRadio;

  // Neu berechneten Preis in Textfeld ausgeben
  document.Bestellung.txtOut_radio.value = preisB;
}

Ciao
Quaese
 
Vielen Dank Quaese für die schnelle und effektive Antwort.
Ich habs jetzt verstanden und so funktioniert es. :)

mit freundlichen Grüßen,
*Zenti
 
So jetzt habe ich das Script auf meiner Seite eingebaut und es funktioniert auch soweit ganz gut.

Ein Problem habe ich jedoch noch:
Wenn eine Radio Button bereits auf checked="checked" gesetzt ist und man die Seite Refresht bzw. ganz neu auf die Seite kommt ist der Wert immer "0".
Soll natürlich so sein das wenn der Radio Button gecheckd ist der Wert auch von anfang an, unten beim Gesamtpreis steht.

Viel. hat ja jemand eine hilfestellung für mich.
Würde mich sehr freuen.

mit freundlichen Grüßen,
*Zenti
 
Waere nur die Moeglichkeit beim onload der Seite ein Script aufzurufen das alle Deine notwendigen Radio-Buttons prueft und entsprechend den Preis setzt.
 
Vielen Dank Chef_De_Loup !
Warum bin ich nicht selber darauf gekommen ;)

Liegt wohl daran das ich den ganzen Tag vor dem PC sitze und mein Gehirn mal abwechslung von dem ganzen Quelltext braucht,..

mit freundlichen Grüßen,
*Zenti
 
Ich sitze nun seit Stunden vor dem Script und kriegs einfach nicht gebacken. -.-
Die Radio Buttons zählen sich einfach nicht zusammen und wenn ein Radio Button gecheckd ist dann wird er am Anfang auch nicht dazu gezählt.
Hab nun schon so viel ausprobiert und gegoogel,... weis einfach nicht mehr weiter...

Hoffe das mir hier einer irgendwie helfen kann.. Wäre euch sehr Dankbar,..

Hier mein momentaner Quellcode:

PHP:
<script type="text/javascript">

preisA = 0
preisB = 0


// FUNKTION FÜR CHECKBOX

function math_checkbox(objCheckbox){
  // Falls die Checkbox deaktiviert wurde
  if(objCheckbox.checked == false){
    // Subtrahieren
    preisA = preisA - Number(objCheckbox.alt);
  }else{
    // Addieren
    preisA = preisA + Number(objCheckbox.alt);
  }
  // Neu berechneten Preis in Textfeld ausgeben
  document.Bestellung.txtOut_checkbox.value = preisA;
}


// FUNKTION FÜR RADIO
var objRadioSave = null;

function math_radio(objRadio){
  // Falls eine gespeicherte Checkbox existiert
  if(objRadioSave != null){
    // Subtrahieren
    preisB = preisB - Number(objRadioSave.alt);
  }

  // Addieren
  preisB = preisB + Number(objRadio.alt);
  // Abgearbeitete Checkbox speichern
  objRadioSave = objRadio;

  // Neu berechneten Preis in Textfeld ausgeben
  document.Bestellung.txtOut_radio.value = preisB;
}

</script>

Das HTML Formular:

HTML:
<form name="Bestellung" action="" method="" target="">

	<div id="content" align="center">
    
    <div><h3>Domain Regestrierung:</h3></div>
    <div><input type="radio" onclick="math_radio(this);" name="domain" id="radio_01" value="test_01" alt="2" checked="checked" />Ja (2,-€)</div>
    <div><input type="radio" onclick="math_radio(this);" name="domain" id="radio_02" value="test_02" alt="0" />Nein (0,-€)</div>
   
    <br />
    
    <div><h3>Administration</h3></div>
    <div><input type="radio" onclick="math_radio(this);" name="admin" id="radio_03" value="test_03" alt="50" checked="checked" />Ja (50,-€)</div>
    <div><input type="radio" onclick="math_radio(this);" name="admin" id="radio_04" value="test_04" alt="0" />Nein (0,-€)</div>
    
    <br />

    <div><h3>Erweiterungen:</h3></div>
    <div><input type="checkbox" onclick="math_checkbox(this);" name="checkbox_01" value="test_05" alt="25" />Kontaktformular (25,-€)</div>
    <div><input type="checkbox" onclick="math_checkbox(this);" name="checkbox_02" value="test_06" alt="30" />Bildergallerie (30,-€)</div>
    <div><input type="checkbox" onclick="math_checkbox(this);" name="checkbox_03" value="test_07" alt="40" />Social Bookmarking (40,-€)</div>
    
    <br />
    <br />

    <div>Einmalige Kosten: <input disabled="disabled" name="txtOut_checkbox" type="text" value="0" size="1" />,-&euro;</div>
    <div>Monatliche Kosten: <input disabled="disabled" name="txtOut_radio" type="text" value="0" size="1" />,-&euro;</div>
  
    </div>
  
</form>


Hab das Script mal auf meinen Webserver hochgeladen damit man sich das Bildlich vorstellen kann:
http://ze-tech.de/test-coding/javascript/mathe.php

Wie gesagt.. Wäre sehr dankbar wenn mir jemand helfen würde..

mit freundlichen Grüßen,
*Zenti
 
Zuletzt bearbeitet:
Also leider habe ich noch ein Problem gefunden:
Der rechnet die Domain-Registrierung und die Adminstration nicht zusammen, er zeigt entweder 2€ oder 50€ (der Wert vom zuletzt geklickten)
 
Jo,.. das meinte ich mit meiner Aussage "Die Radio Buttons zählen sich einfach nicht zusammen "..
Danke fürs drüberschauen,..
 
Hi,

du kannst in der von mir empfohlenen Variable selbstverständlich nur ein Element speichern.

Ist das erste Element darin gespeichern und es wird das Zweite aktiviert, wird der Wert des ersten überschrieben. Das Zweite wird darin gespeichert.

Lösung: modifiziere die Variable dahingehend, dass mehr Elemente in ihr gespeichert werden können.

Beispiel (Variable als Objekt):
Code:
// FUNKTION FÜR RADIO
var objRadioSave = {};

function math_radio(objRadio){
  // Falls eine gespeicherte Checkbox existiert
  if(typeof objRadioSave[objRadio.name] != "undefined"){
    // Subtrahieren
    preisB = preisB - Number(objRadioSave[objRadio.name].alt);
  }

  // Addieren
  preisB = preisB + Number(objRadio.alt);
  // Abgearbeitete Checkbox speichern
  objRadioSave[objRadio.name] = objRadio;

  // Neu berechneten Preis in Textfeld ausgeben
  document.Bestellung.txtOut_radio.value = preisB;
}

Ciao
Quaese
 
Zurück