Ankündigung

Einklappen
Keine Ankündigung bisher.

Funktion automatisch ausführen

Einklappen

Neue Werbung 2019

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Funktion automatisch ausführen

    Hallo zusammen!

    Ich hab eine Javascriptfunktion, die das Alter berechnet.
    Man gibt einfach das Geburtsdatum in ein Formular ein und schon erscheint im Feld darunter das Alter.
    Soweit sogut, aber in meinem Programm kann man auch Einträge bearbeiten. Wenn man also das Geburtsdatum ändert, dann ändert sich auch das Alter, logisch, ABER wenn man einen Datensatz öffnet, erscheint nichts im Feld Alter (erst wenn man das Geburtsdatum wieder ändert).
    Nun ist das aber ziemlich blöd, wenn man jedesmal das Geburtsdatum eingeben muss, wenn man wissen will wie alt jemand ist (wenn man nicht Kopfrechnen will :wink: ), also möchte ich, dass die Funktion automatisch ausgeführt wird. Also: sobald man einen Datensatz öffnet (mit Geburtsdatum usw) soll das Alter berechnet werden (Funktion) damit man es gleich sieht.

    Ich hab viel rumgesucht im Web, bin auf sowas wie onLoad gestoßen, hat aber nicht funktioniert, ist onLoad überhaupt das richtige hier, oder gibt es eine bessere Lösung?

    Vielen Dank im Vorraus für jede Antwort!


  • #2
    Mit "onLoad" - würd's scho gehen.

    Geht's um die Funktion "alter()" aus diesem Thread ?

    Was hast du denn bis jetzt gemacht (Aufruf der Funktion via onLoad?) ?
    ToolsTool - Online (SEO-)Tools im Browser gleichzeitig starten ...

    Kommentar


    • #3
      Ja, um die geht's!
      Ich hab sie anfangs (so funktioniert alles) mittels onChange() aktiviert, sobald man etwas in einem der Geburtstagsfelder ändert (sind 3 - Tag, Monat, Jahr) wird die Funktion aufgerufen.
      Code:
      <td>
      
      Geb. Datum</p></td>
      <td><input size="4" type="Text" name="GEB_DATUM_tag" value="<?=$GEB_DATUM[2]?>" maxlength="2" onChange="alter()">
      <input size="4" type="Text" name="GEB_DATUM_monat" value="<?=$GEB_DATUM[1]?>" maxlength="2" onChange="alter()">
      <input size="4" type="Text" name="GEB_DATUM_jahr" value="<?=$GEB_DATUM[0]?>" maxlength="4" onChange="alter()">
      <font size="2">Tag / Monat / Jahr</font>
      Mit onLoad() hab ich's so probiert:
      Code:
      <td>
      
      Alter</p></td>
      <td><input type="text" name="ALTER" size="5" value="" readonly="readonly" onLoad="alter()"></td>
      Hat aber nicht funktioniert, und wenn man auf aktualisieren klickt, werden auch noch der Tag und der Monat gelöscht (das Jahr bleibt, hat wohl mit der Funktion zu tun, die Jahre werden ja berechnet bei mir)
      Schätze ich hab das onLoad() falsch eingebaut, oder?
      Wie gehört das richtig?

      Kommentar


      • #4
        Habe nicht wirklich Ahnung von JS, aber wird nicht onLoad() in den BODY-Tag eingesetzt ?
        Kann mich jetzt auch irren ...

        Kommentar


        • #5
          DANKE!
          Genau das war's!

          Jetzt hab ich die Funktion noch etwas erweitert (in dem Programm soll man auch "alte" Einträge machen können, also von Leuten die schon verstorben sind - sozusagen eine Stammbaummöglichkeit).
          Man kann also nun auch das Todesdatum von Personen eingeben, und da soll jetzt wieder das Alter berechnet werden. Ich hab also einfach die Funktion etwas erweitert, damit das so auch berechnet wird, leider stimmt das Ergebnis aber nicht immer. Wenn man zB am 25.07.1984 geboren ist und am 25.07.2005 gestorben ist, dann ist man 21 gewesen -> korrekt, wenn man aber am 24.07.2005 gestorben ist, dann ist man erst 20 gewesen, bei meiner Funktion allerdings schon 21. Ich hab also irgendwo einen "Denkfehler" in der Funktion drin...
          Kann mir jemand helfen den zu finden?
          Die Funktion sieht so aus:
          Code:
          // Funktion, die das Alter in Jahren berechnet
          				function alter()
          				{
          					var alter = 0;
          					var G_tag = parseInt(document.FORMULAR.GEB_DATUM_tag.value);
          					var G_monat = parseInt(document.FORMULAR.GEB_DATUM_monat.value);
          					var G_jahr = parseInt(document.FORMULAR.GEB_DATUM_jahr.value);
          					
          					var T_tag = parseInt(document.FORMULAR.TOD_DATUM_tag.value);
          					var T_monat = parseInt(document.FORMULAR.TOD_DATUM_monat.value);
          					var T_jahr = parseInt(document.FORMULAR.TOD_DATUM_jahr.value);
          
          					var H_datum = new Date();
          					
          					var H_tag = H_datum.getDate();
          					var H_monat = H_datum.getMonth();
          					var H_jahr = H_datum.getYear();
          
          					if(!T_jahr)
          					{
          						alter = H_datum.getYear() - G_jahr;
          
          						if(G_monat > H_monat)
          						{
          							alter = alter - 1;
          						}
          						else if(G_monat == H_monat)
          						{
          							if(G_tag > H_tag)
          							{
          								alter = alter - 1;
          							}
          						}
          					}
          					else
          					{
          						alter = T_jahr - G_jahr;
          						
          						if(G_monat > T_monat)
          						{
          							alter = alter - 1;
          						}
          						else if(G_monat == T_monat)
          						{
          							if(G_tag > T_tag)
          							{
          								alter = alter - 1;
          							}
          						}	
          					}
          					
          	 				document.FORMULAR.ALTER.value = alter;
          				}

          Kommentar


          • #6
            Wie gesagt, ich habe »Null Plan« von JS, aber solche Berechnung sollte man mit Timestamp machen.
            Keine Ahnung ob es sowas auch im JS gibt.

            Kommentar


            • #7
              Tja, deshalb hab ich ja grad HIER gepostet, damit ich Hilfe bei JAVASCRIPT bekomme...

              Kommentar


              • #8
                Das Leben kann so einfach sein:

                http://www.google.de/search?hl=de&q=...chnen%22&meta=

                Kommentar


                • #9
                  Naja, einfach ist relativ ...
                  Der Link hat mir eigentlich nichts gebracht, alle Funktionen die dort geschrieben worden sind, sind entweder in php oder wahnsinnig komplex gewesen... trotzdem danke für die Mühe.

                  Ich hab also probiert und probiert... mal diese Variable ausgeben lassen und mal jene... und dann hab ich das Problem gefunden!

                  Wenn man sein Geburtsdatum in diesem Format eingibt geb 23.9.1984 ist man 20 Jahre alt -> korrekt!
                  ABER: wenn man sein Geburtsdatum in diesem Format eingibt geb 23.09.1984 ist man 21 Jahre alt -> falsch!

                  Das liegt daran, dass die Varable für den aktuellen Monat 9 ist, und die für das Geburtstagsmonat 0 ist!
                  Tja, jetzt kenn ich zwar den Fehler, und ich könnte einfach hinschreiben, dass der User keine "0" bei einstelligen Zahlen schreiben darf, aber das ist nicht das was ich will (außerdem schreib ich es ja selber auch immer mit "0" :wink: )

                  Meine Frage also:
                  Wie kann ich die 09 (oder 08, oder 07,...) in der Funktion zu einer 9 (oder 8, oder 7,...) machen, also den Nuller wegstreichen?
                  In php würd ich das vermutlich mit explode() machen, aber wie in javascript?

                  Danke im Vorraus für Antworten!

                  Kommentar


                  • #10
                    das dürfte das sein was du suchst
                    http://de.selfhtml.org/javascript/ob...gig.htm#number

                    Kommentar


                    • #11
                      Erstmal vielen Dank für den Link!

                      Das funktioniert super von 01 bis 07, aber bei 08 und 09 kommt trotzdem 0 raus, weißt du wieso?

                      Kommentar


                      • #12
                        Die Funktion, die das erledigt verwendest du bereits : parseInt()

                        Schau dir mal die Doku bei SelfHTML dazu an: hier

                        Sinnvoll, um z.B. Anwendereingaben in Zahlen umzuwandeln, mit denen man anschließend rechnen kann.
                        Die Funktion Number() hat einen anderen Zweck und ist dafür nicht geeignet! Siehe Doku
                        ToolsTool - Online (SEO-)Tools im Browser gleichzeitig starten ...

                        Kommentar


                        • #13
                          Tja, wenn das kleingedruckte doch manchmal mehr hervorgehoben wäre... :wink:

                          Besonders im Bereich der Datumsberechnung werden häufig Zahlen mit führender Null benutzt.
                          ...
                          Des Rätsels Lösung dafür ist, dass JavaScript Zahlen mit führender 0 als Oktalzahlen interpretiert, nicht als Dezimalzahlen.
                          ...
                          Mit einer Anweisung wie alert(parseInt("08", 10) * 60) können Sie das Problem vermeiden und erzwingen, dass der Wert dezimal interpretiert wird
                          Natürlich, OKTALSYSTEM, deshalb hat's bis 7 funktioniert, da gibt's ja nur 0-7...

                          Vielen Dank für den Hinweis!
                          Hätte sicher noch länger gebraucht, bis ich drauf gekommen wäre, dass es am falschen Zahlensystem liegt!

                          Kommentar

                          Lädt...
                          X