Javascript , Script berechnet nicht

anja1112

Cadet 2nd Year
Dabei seit
Feb. 2013
Beiträge
19
Hallo zusammen

Habe dieses Javascript und schaffe es nicht den oberen teil d.h. die Preise durch Auswahl berechnen zu lassen. Kenne mich sehr wenig damit aus und komme einfach nicht drauf das der Rechner funktioniert.
Kann mir jemand bitte helfen ?
HTML:
<html>
<head>
<title>Test</title>
<script type="text/javascript">
<!--
function preis() {
 
	var wert_a = 20; // funkton ja
	var wert_b = 6; // funktion nein
	var wert_c = 23; // zustand
	var wert_d = 25; // simlock
	var wert_e = 1; // ladekabel
	var wert_f = 0.25; // sonstige
 
	wert_funktion = document.form.funktion.options[document.form.funktion.selectedIndex].value;
	wert_zustand = document.form.zustand.options[document.form.zustand.selectedIndex].value;
	wert_simlock = document.form.simlock.options[document.form.simlock.selectedIndex].value;
      wert_ladekabel = document.form.ladekabel.options[document.form.ladekabel.selectedIndex].value;
       
 
	if (wert_funktion == 1) { ausgabe_funktion = wert_a; }
     
		else if (wert_funktion == 2) { ausgabe_funktion = wert_b; }
     
		else if (wert_funktion == 3) { ausgabe_funktion = wert_c; }
     
		else if (wert_funktion == 4) { ausgabe_funktion = wert_d; }
            else if (wert_funktion == 5) { ausgabe_funktion = wert_e; }

if (wert_funktion == 1) { ausgabe_funktion = wert_a; }
     
    else if (wert_funktion == 2) { ausgabe_funktion =wert_a; }
     
    else if (wert_funktion == 3) { ausgabe_funktion = wert_a + wert_b; }
     
    else if (wert_funktion == 4) { ausgabe_funktion = wert_a + (b*2); }
     
    else { var zustand = 2; var simlock = 1; ausgabe_funktion = wert_a; }
     
    if (ladekabel == 1) { ausgabe_ladekabel = wert_d; }
     
    else { var simlock = 0; )     
     
    // Kurtaxe
    var ladekabel = (ausgabe_ladekabel; )
     
    // Gemeindeabgaben
    var zustand = (ausgabe_simlock; )
     
    document.form.gesamt.value = parseFloat((funktion*zustand)+simlock+ladekabel).toFixed(2);
     
    }     
-->
</script>
</head>
<body>
    <form name="form" onkeyup="preis();">
    <div class="position">Lässt sich einwandfrei benutzen? <div class="option right">
    <select name="funktion" onchange="preis()">
    <option selected="selected" value="2">ja</option>
    <option value="3">nein</option>
    </select></div></div>

    <div class="clear"></div>
    <div class="position">Zustand des Gerätes? <div class="option right">
    <select name="zustand" onchange="preis()">
    <option selected="selected" value="1">Sehr gut</option>
    <option value="2">Gut</option>
    <option value="3">Schlecht</option>
        </select></div></div>

    <div class="clear"></div>
    <div class="position">Simlock vorhanden? <div class="option right">
    <select name="simlock" onchange="preis()">
    <option selected="selected" value="1">kein</option>
    <option value="2">Österreich</option>
    <option value="3">Deutschland</option>
    <option value="4">andere</option>
    <option value="5"></option>
    
    </select></div></div>
    <div class="clear"></div>
    <div class="position">Ladekabel vorhanden?
    <div class="option right"><select name="ladekabel" onchange="preis()"><option selected="selected" value="0">Nein   </option><option value="1">Ja</option></select></div></div>
    <div class="clear"></div>

    <div class="position">&nbsp;</div>
    <div class="position"><div class="gesamt right"><input type="text" name="gesamt" value="61.50" class="input_gesamt" readonly="readonly" />*</div><strong>Gesamt in Euro:</strong><br /><small>*Preis kann abweichen</small></div>
    <div class="clear"></div>
    <p><small>Im Preis enthalten ist: <em>Strom, Wasser, Heizung, Handt&uuml;cher und Bettw&auml;sche</em></small></p>
     
    </form>
 
 
</body>
</html>
 

evilbaschdi

Lt. Commander
Dabei seit
Aug. 2011
Beiträge
1.935
hätt aber ein post auch gereicht. auch wenn die kommentare andere sind.
 

anja1112

Cadet 2nd Year
Ersteller dieses Themas
Dabei seit
Feb. 2013
Beiträge
19
Ich bin noch neu im Bereich Javascript und bin dabei es zu lernen jedoch brauche ich dieses Skript dringend. Weiss auch das es sehr viel verlangt ist aber ist es möglich das mir jemand den oberen teil richtig schreibt damit das ganze vorerst funktioniert. :(
 

BuzzGo

Lieutenant
Dabei seit
Dez. 2006
Beiträge
578

anja1112

Cadet 2nd Year
Ersteller dieses Themas
Dabei seit
Feb. 2013
Beiträge
19
Habs mir angeschaut jedoch blick ich da nicht durch wo ich die Fehler habe .Kann mir da wirklich keiner helfen ? :(
 

benneq

Admiral
Dabei seit
Juli 2010
Beiträge
9.006
Erst mal sauber formatieren und kommentieren:
Code:
function preis() {
	// Schritt 1: Setzt die Variablen auf vorgegebene Werte.
	var wert_a = 20; // funkton ja
	var wert_b = 6; // funktion nein
	var wert_c = 23; // zustand
	var wert_d = 25; // simlock
	var wert_e = 1; // ladekabel
	var wert_f = 0.25; // sonstige


	// Schritt 2: Holt die Daten aus dem Formular und speichert wie in den Variablen.
	wert_funktion = document.form.funktion.options[document.form.funktion.selectedIndex].value;
	wert_zustand = document.form.zustand.options[document.form.zustand.selectedIndex].value;
	wert_simlock = document.form.simlock.options[document.form.simlock.selectedIndex].value;
	wert_ladekabel = document.form.ladekabel.options[document.form.ladekabel.selectedIndex].value;
       
 	
	// Je nach Wert von wert_funktion wird der Wert von ausgabe_funktion gesetzt.
	if (wert_funktion == 1) { ausgabe_funktion = wert_a; }
	else if (wert_funktion == 2) { ausgabe_funktion = wert_b; }
     	else if (wert_funktion == 3) { ausgabe_funktion = wert_c; }
     	else if (wert_funktion == 4) { ausgabe_funktion = wert_d; }
	else if (wert_funktion == 5) { ausgabe_funktion = wert_e; }

	
	// Das hier macht die Zeilen hier drüber eigentlich überflüssig, da 'ausgabe_funktion' in jedem Fall überschrieben wird.
	if (wert_funktion == 1) { ausgabe_funktion = wert_a; }
	else if (wert_funktion == 2) { ausgabe_funktion =wert_a; }
	else if (wert_funktion == 3) { ausgabe_funktion = wert_a + wert_b; }
	else if (wert_funktion == 4) { ausgabe_funktion = wert_a + (b*2); }
	else { var zustand = 2; var simlock = 1; ausgabe_funktion = wert_a; }
	// <-- wozu wird hier zustand gesetzt, wenn es gleich wieder überschrieben wird?!
	
	
	if (ladekabel == 1) { ausgabe_ladekabel = wert_d; }
	else { var simlock = 0; )     

	// Kurtaxe
	// Was sollen diese Klammern? Überflüssig und unleserlich
	// die Variable 'ausgabe_ladekabel' wird nicht in diesem Scope initialisiert!?
	var ladekabel = (ausgabe_ladekabel; )
     
	// Gemeindeabgaben
	// Was sollen diese Klammern? Überflüssig und unleserlich
	// die Variable 'ausgabe_simlock' existiert gar nicht?!
	var zustand = (ausgabe_simlock; )
     
	// die Variable 'funktion' existiert im Code nicht?!
	// die Variable 'simlock' wird nicht in diesem Scope initialisiert!?
	document.form.gesamt.value = parseFloat((funktion*zustand)+simlock+ladekabel).toFixed(2);
     
}
Da sind bestimmt noch etliche andere Probleme ;)
 

HDScratcher

Lieutenant
Dabei seit
Aug. 2011
Beiträge
1.002
Als Ergänzung auf die sauber formatierte Version:

Zeile 36: schließende Klammer sollte wohl geschweift statt rund sein


Zeile 30: (b*2) // Was ist b?
 

anja1112

Cadet 2nd Year
Ersteller dieses Themas
Dabei seit
Feb. 2013
Beiträge
19
b sollte der wert funktion nein sein. Was ich brauche ist das der Rechner die Preise durch Auswahl ja oder nein zusammenrechnet und unten den Gesamtpreis angibt. Habs eh wahrscheinlich verkompliziert und falsch gemacht .
 

E.o.B

Lt. Junior Grade
Dabei seit
Juli 2012
Beiträge
442
Hallo,

1. mehr auf die variablen (namen) achten, Du suchst Dir namen aus und nutzt dann im Script nicht dieselben namen.
z.B: 'b' anstatt 'wert_b' oder 'funktion' statt 'wert_zustand'... usw.
2. Klammerung checken, das auch die RICHTIGEN klammern benutzt werden.
line 36: ')' statt '}'

Empfehlung, das ganze auf Papier planen und Schriftart im Editor ändern.

gl
E.o.B
 

benneq

Admiral
Dabei seit
Juli 2010
Beiträge
9.006
Vielleicht solltest du noch mal von vorn beginnen und klein anfangen:

Dieses 'wert_' - Präfix braucht kein Mensch:
Code:
// Schritt 1: Setzt die Variablen auf vorgegebene Werte.
var wertFunktionJa = 20; // funkton ja
var wertFunktionNein = 6; // funktion nein
var wertZustand = 23; // zustand
var wertSimlock = 25; // simlock
var wertLadekabel = 1; // ladekabel
var wertSonstige = 0.25; // sonstige

Code:
// Schritt 2: Holt die Daten aus dem Formular und speichert wie in den Variablen.
var funktion = document.form.funktion.options[document.form.funktion.selectedIndex].value;
var zustand = document.form.zustand.options[document.form.zustand.selectedIndex].value;
var simlock = document.form.simlock.options[document.form.simlock.selectedIndex].value;
var ladekabel = document.form.ladekabel.options[document.form.ladekabel.selectedIndex].value;

Code:
// Hier erstellen wir schon mal die Variable, die am Ende das Ergebnis enthalten soll.
// So kann man Schritt für Schritt berechnen und dann Werte drauf addieren.
var ausgabe = 0;

Ich hab keine Ahnung wie die Berechnung am Ende genau aussehen soll, deshalb hab ich mir was ausgedacht:
1. Wenn das Gerät funktioniert gibt's 20, sonst 6
2a. sehr guter Zustand: multipliziert den Wert mit 3
2b. guter Zustand: multipliziert den Wert mit 2
2c. schlechter Zustand: multipliziert den Wert mit 1
3a. Ohne Simlock: addiert wertSimlock auf den Endpreis
3b. Österreich Simlock: addiert wertSimlock/3 auf den Endpreis
3c. Deutschland Simlock: addiert wertSimlock/2 auf den Endpreis
3d. andere Simlock: addiert 0 auf den Endpreis
4. Ladekabel: addiert 1, wenn nicht vorhanden: addiert 0

Code:
// Nun die Berechnungen für 'funktion':
// Laut dem HTML Code gibt es nur '2' und '3' als values
if(funktion == 2) { ausgabe = ausgabe + wertFunktionJa; }
else if(funktion == 3) { ausgabe = ausgabe + wertFunktionNein; }

// Berechnung für 'zustand':
if(zustand == 1) { ausgabe = ausgabe * 3; }
else if(zustand == 2) { ausgabe = ausgabe * 2; }
else if(zustand == 3) { ausgabe += ausgabe * 1; }

// Berechnung für 'simlock':
if(simlock == 1) { ausgabe = ausgabe + wertSimlock; }
else if(simlock == 2) { ausgabe = ausgabe + (wertSimlock / 3); }
else if(simlock == 3) { ausgabe = ausgabe + (wertSimlock / 2); }
else if(simlock == 4) { ausgabe = ausgabe + 0; }
else if(simlock == 5) {} // hat keinen Text im HTML ?!

// Berechnung für 'ladekabel':
if(ladekabel == 0) { ausgabe = ausgabe + 0; }
else if(ladekabel == 1) { ausgabe = ausgabe + wertLadekabel; }

Und zum Schluss den Wert ausgeben:
Code:
document.form.gesamt.value = parseFloat(ausgabe).toFixed(2);


P.S. ich habe mir den HTML Code noch mal angeschaut: Was zur Hölle hat "Im Preis enthalten ist: Strom, Wasser, Heizung, Handtücher und Bettwäsche" mit einem Handy zu tun? :evillol:
 
Zuletzt bearbeitet: (variablen namen FTW!)

anja1112

Cadet 2nd Year
Ersteller dieses Themas
Dabei seit
Feb. 2013
Beiträge
19
haha Gar nix :D Diesen Code habe ich mal vor 4 Jahren für eine Hotelreservierung bzw Zimmerreservierung benutzt und wollte Ihn abändern nur ist da was schief gelaufen wie du siehst :D
Ergänzung ()

Das ist PERFEKT und funktioniert einwandfrei :) eine Frage hätte ich noch . Wie kann ich erreichen das der berechnete Gesamtpreis auf die nächste Seite weitergeleitet wird ? z.b. Warenkorb um den Vorgang abzuschließen.


Bedanke mich nochmals für die wunderbare Arbeit.
 

benneq

Admiral
Dabei seit
Juli 2010
Beiträge
9.006
Kommt ganz drauf an, wie du deine 'nächste Seite' aufrufst.

Da du ein '<form>' benutzt, geh ich mal davon aus, dass das Formular auch noch einen Button erhalten sollte, der es abschickt?!
Wenn ja, kannst du dein '<form>' um ein hidden input Feld erweiterst und dessen Wert setzt.

Grob so:
Code:
<form ...>
  ... <- das was eh schon drin steht
  
  <input type="submit">
  <input type="hidden" name="wert" value="0">
</form>

und dann im JavaScript teil ganz unten noch das hinzufügen:
Code:
document.form.wert.value = parseFloat((funktion*zustand)+simlock+ladekabel).toFixed(2);

Ich hoffe, du denkst an die ganzen Sicherheitsaspekte: Lass die Daten vom Server validieren. Es ist nämlich sehr einfach möglich einen Wert wie z.B. '2134523.31' an die nächste Seite zu übergeben ;)
 

anja1112

Cadet 2nd Year
Ersteller dieses Themas
Dabei seit
Feb. 2013
Beiträge
19
Das ist SUPER so. Nur wie wird der errechnete Wert an die nächste Seite wor der Warenkorb ist Weitergeleitet sowie ist es möglich das statt Senden auf dem Button Warenkorb steht ?
 
Top