bln_racer: Script funzt nicht mit Opera 7.23

Hallo Leute,

erstmal vielen dank an die Ersteller der SELFHTML-Seite, das Handbuch konnte mir sehr gut helfen, denn ich habe vor kurzem bei 0 angefangen und jatzt habe ich mein erstes Javascript erstellt.

Mein Problem:

Ich habe einen Online Rechner (für meine Belange) programmiert, im IE funzt er wunderbar, jedoch mit Opera wird dort nix berechnet (und ich surfe nunmal mit Opera). Dort wird der Mietpreis berechnet, nachdem ein User das Datum eingegeben hat.

Ich bekomme folgende Fehlermeldung:

http://euramobil.gmxhome.de/Preisrechner.htm
Unknown context
Syntax error while loading (line 13)
  else
---------^

http://euramobil.gmxhome.de/Preisrechner.htm
Event thread: onclick
Error:
name: ReferenceError
message: Statement on line 1: Reference to undefined variable: No such variable 'Preisrechner'
Backtrace:
  In unknown script
    Preisrechner();
  At unknown location
    {event handler trampoline}

ich weiß den Quellcode kann man bestimmt besser machen, aber es ist nunmal mein erster. Hier ist er:

<html>
<head>
<title>Preisrechner</title>
<script type="text/javascript">
<!--
 var Preisrechner,vonTag,vonMonat,vonJahr,bisTag,bisMonat,bisJahr,Mietdauer,Mietpreis,x,y,z,w,Freikm,km,Zusatzkosten,Gesamt;
 function Preisrechner()
  {
  var x = (document.Formular.vonTag.value*1+document.Formular.vonMonat.value*30);
  var y = (document.Formular.bisTag.value*1+document.Formular.bisMonat.value*30);
  var z = 211;
  var w = 271;
  if ((x<=z && y<=z) || (x>=w && y>=w) || (x>=w && y<=z))
   {
   Mietpreis = (Math.floor((y-x)/7)*250 + ((y - x) - (Math.floor((y-x)/7))*7)*45)};
    else
     {
     if (x<=z && y>=z && y<=w)
     {
     Mietpreis = (Math.floor((z-x)/7)*250 + ((z - x) - (Math.floor((z-x)/7))*7)*45 +
     Math.floor((y-z)/7)*350 + ((y - z) - (Math.floor((y-z)/7))*7)*55)};
      else
       {
       if (x>=z && x<=w && y<=w)
        {Mietpreis = (Math.floor((y-x)/7)*350) + ((y - z) - (Math.floor((y-z)/7))*7)*55};
         else
          {
           Mietpreis = (Math.floor((y-w)/7)*250 + ((y - w) - (Math.floor((x-z)/7))*7*55 +
           Math.floor((y-z)/7)*350 + ((y - z) - (Math.floor((y-z)/7))*7)*55));
           }
            }
             };
  var Mietdauer = (document.Formular.bisJahr.value - document.Formular.vonJahr.value)*365 +
  (document.Formular.bisMonat.value - document.Formular.vonMonat.value)*30 +
   (document.Formular.bisTag.value - document.Formular.vonTag.value);
   var Freikm = (y-x)*150;
   var Zusatzkosten = (document.Formular.km.value*1 - Freikm*1)*0.1;
   var Gesamt = Zusatzkosten*1 + Mietpreis*1;
   document.Formular.Mietdauer.value=Mietdauer;
   document.Formular.Mietpreis.value=Mietpreis;
   document.Formular.Freikm.value=Freikm;
   document.Formular.Zusatzkosten.value=Zusatzkosten;
   document.Formular.Gesamt.value=Gesamt;
   }

//-->
</script>

P.S. weiß jemand wie man einfach ein Datum von einem anderen subtrahiert, denn ich habe es irgendwie kompliziert gemacht.

Vielen Dank

  1. hi,

    var Preisrechner, [...]
     function Preisrechner()

    eine variable und eine funktion mit dem gleichen namen zu benennen, ist tunlichst zu unterlassen.

    du hast dir jetzt mit deiner funktion Preisrechner deine gleichnamige variable überschrieben, deshalb auch die meldung

    No such variable 'Preisrechner'

    gruss,
    wahsaga

  2. Hallo bln_racer,

    if ((x<=z && y<=z) || (x>=w && y>=w) || (x>=w && y<=z))
       {
       Mietpreis = (Math.floor((y-x)/7)*250 + ((y - x) - (Math.floor((y-x)/7))*7)*45)}

    zusätzlich zu wahsagers Antwort:
    hier fehlt eine schliessende Klammer.

    else

    P.S. weiß jemand wie man einfach ein Datum von einem anderen subtrahiert, denn ich habe es irgendwie kompliziert gemacht.

    Sieh dir mal das Date-Objekt an: http://selfhtml.teamone.de/javascript/objekte/date.htm#allgemeines

    Grüße
    Andreas

    --
    "Programming today is a race between software engineers striving to build bigger and better idiot-proof programs, and the Universe trying to produce bigger and better idiots. So far, the Universe is winning."
    (Rich Cook)
    1. Vielen Dank für die Antworten,

      leider konnte mir keine von beiden helfen, denn die variable Preisrechner wird gar nicht benutzt, habe sie trotzdem entfernt.

      @andreas, ich kann keine fehlende Klammer finden, ich hbe 8 öffnende und 8 schließende Klammern. Würde denn das Script überhaupt im IE funzen wenn eine Klammer fehlt, ich denke nicht.

      Dieses Script funzt ja im IE, auch beim frontpage in der Vorschau kann man berechnungen machen. Opera macht mir Probleme.

      Hoffe ihr könnt mir noch weiterhelfen

      1. Hallo bln_racer,

        @andreas, ich kann keine fehlende Klammer finden, ich hbe 8 öffnende und 8 schließende Klammern. Würde denn das Script überhaupt im IE funzen wenn eine Klammer fehlt, ich denke nicht.

        Stimmt, ich hatte die schliessende Klammer am Ende der Zeile übersehen. Du solltest dir dennoch mal das Date-Objekt ansehen. Damit kannst Du den Code stark vereinfachen. Hier nochmal der Link: http://selfhtml.teamone.de/javascript/objekte/date.htm#allgemeines. Scroll mal runter bis zum ersten Beispiel.

        Grüße
        Andreas

        --
        Auch eine Reise über tausend Kilometer muß mit einem einzelnen Schritt beginnen.
        Laotse "Taoteking"
        1. Habe ich gemacht, ich werde das auch ändern. Denn dann wird auch richtig gerechnet und nicht so wie bei meinem Beispiel mit einem Fehler von +-1Tag, weil ich den Monat als 30Tage berechne