schroere: Problem mit kalender

hallo,
hab nach langen suchen mich für die überarbeitung eines einfachen javascritkalendes entschieden. er funktioniert auch bis auf das vor und zurückblättern. eigentlich habe ich 2 probleme.
1. wenn ich das update des kalenders per body onload initial aufrufe findet er die funktion update beim vorblättern nicht mehr.
2. wenn ich innerhalb des body das update aufrufe funktioniert es. ich habe zusätzlich eine globale variable definiert um den aufruf innerhalb des body nur beim neuladen der seite zu bewerkstelligen. irgendwie wird meine variable überschrieben und ein klich auf vor zeigt den nächsten monat und dann sofort wieder den alten.

wer kann helfen ??

<?
if (isset($_GET['datum'])) $datum=$_GET['datum'];
?>
<html>
<head>
<script language="JavaScript">
<!--

myupdate=2;

function update(Diff)
{
alert('check1 myupdate'+myupdate)

myupdate=1;
   var now = new Date();
   switch(Diff){
   case 1:
            var Monat = now.getMonth()
            var Jahr = now.getYear()
            var MN = dstring
            var Wo = MN.indexOf(" ")
            Monatname = MN.substring(0,Wo)
            Jahr = eval(MN.substring(Wo+1,MN.length))
            if (Monatname=="Januar"){Monat=0}
            if (Monatname=="Februar"){Monat=1}
            if (Monatname=="März"){Monat=2}
            if (Monatname=="April"){Monat=3}
            if (Monatname=="Mai"){Monat=4}
            if (Monatname=="Juni"){Monat=5}
            if (Monatname=="Juli"){Monat=6}
            if (Monatname=="August"){Monat=7}
            if (Monatname=="September"){Monat=8}
            if (Monatname=="Oktober"){Monat=9}
            if (Monatname=="November"){Monat=10}
            if (Monatname=="Dezember"){Monat=11}
            var Monat = Monat + 1
            if (Monat==12) {
               Monat = 0
               Jahr = Jahr + 1
            }
            var Monatname = ""
            var Erster = new Date(Jahr,Monat,1)
            window.document.dateform.monat.value=Monat
            window.document.dateform.jahr.value=Jahr
            window.document.dateform.update.value=1
            break;
   case 0:
            var Monat = now.getMonth()
            Monat=window.document.dateform.monat.value
            var Monatname = ""
            var Jahr = now.getYear()+1900
            Jahr=window.document.dateform.jahr.value
            var Erster = new Date(Jahr,Monat,1)
            break;
   case -1:            var Monat = now.getMonth()
            var Jahr = now.getYear()
            var MN = dstring
            var Wo = MN.indexOf(" ")
            Monatname = MN.substring(0,Wo)
            Jahr = eval(MN.substring(Wo+1,MN.length))
            if (Monatname=="Januar"){Monat=0}
            if (Monatname=="Februar"){Monat=1}
            if (Monatname=="März"){Monat=2}
            if (Monatname=="April"){Monat=3}
            if (Monatname=="Mai"){Monat=4}
            if (Monatname=="Juni"){Monat=5}
            if (Monatname=="Juli"){Monat=6}
            if (Monatname=="August"){Monat=7}
            if (Monatname=="September"){Monat=8}
            if (Monatname=="Oktober"){Monat=9}
            if (Monatname=="November"){Monat=10}
            if (Monatname=="Dezember"){Monat=11}
            var Monat = Monat - 1
            if (Monat==-1)
            {
               Monat = 11
               Jahr = Jahr - 1
            }
            var Monatname = ""
            var Erster = new Date(Jahr,Monat,1)
            window.document.dateform.monat.value=Monat
            window.document.dateform.jahr.value=Jahr
            window.document.dateform.update.value=1
            break;
      default:
            break;
   }

if (Monat==0){Monatname="Januar"}
   if (Monat==1){Monatname="Februar"}
   if (Monat==2){Monatname="März"}
   if (Monat==3){Monatname="April"}
   if (Monat==4){Monatname="Mai"}
   if (Monat==5){Monatname="Juni"}
   if (Monat==6){Monatname="Juli"}
   if (Monat==7){Monatname="August"}
   if (Monat==8){Monatname="September"}
   if (Monat==9){Monatname="Oktober"}
   if (Monat==10){Monatname="November"}
   if (Monat==11){Monatname="Dezember"}
 dstring=Monatname+' '+Jahr
  window.document.write('<table>')
  window.document.write('<tr><td><a href="#" onclick="update(-1);"><</a></td><td colspan="5">'+dstring+'</td><td><a href="#" onclick="update(1);">></a></td></tr>')
  window.document.write('<tr><td>Mo</td><td>Di</td><td>Mi</td><td>Do</td><td>Fr</td><td>Sa</td><td>So</td></tr>')
  if (Erster.getDay()==1){window.document.write('<tr>')}
  if (Erster.getDay()==2){window.document.write('<tr><td>&nbsp;</td>')}
  if (Erster.getDay()==3){window.document.write('<tr><td>&nbsp;</td><td>&nbsp;</td>')}
  if (Erster.getDay()==4){window.document.write('<tr><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td>')}
  if (Erster.getDay()==5){window.document.write('<tr><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td>')}
  if (Erster.getDay()==6){window.document.write('<tr><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td>')}
  if (Erster.getDay()==0){window.document.write('<tr><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td>')}
  i=0
  while (i<=31)
  {
    i++;
    Heute = new Date(Jahr,Monat,i)
    if (Heute.getMonth()==Monat){
    if (i<=9){i="0"+i}
    {
      if (Heute.getDay()==1){window.document.write('<tr>')}
      var mymonat=now.getMonth()+1
      var myjahr=now.getYear()+1900
      window.document.write('<td><a href="#" onclick="send('+myjahr+','+mymonat+','+i+');">'+i+'</a></td>')
      if (Heute.getDay()==0){window.document.write('</tr>')}
    }
    }
  }
  window.document.write('<table>')
alert('check2 myupdate'+myupdate)
}

function send(jahr,monat,tag)
{
   if (tag<=9){tag="0"+tag}
   if (monat<=9){monat="0"+monat}
   var mydatum1=tag+'.'+monat+'.'+jahr
   parent.window.opener.window.document.myform.datum.value = mydatum1;
   parent.close();
}

//-->
</script>
</head>
<body>
<form name="dateform">
<?list($tag,$monat,$jahr)=split('.',$datum);?>
<input name="jahr" type="hidden" value="<?echo $jahr?>">
<input name="monat" type="hidden" value="<?echo $monat-1?>">
<input name="update"  value="0">
<script language="JavaScript">
<!--
alert('my1: '+myupdate);
if (myupdate==2){ update(0);}
alert('my2: '+myupdate);
//-->
</script>

</form>
</body>
</html>

  1. Einen schönen guten Mittag.

    Hast du denn eine Fehlermeldung aus deiner Javascriptkonsole? Damit ließe sich dann leichter auf den Fehler rückschließen und man müsste nicht den gesamten Quelltext durchforsten

    <?
    if (isset($_GET['datum'])) $datum=$_GET['datum'];
    ?>

    Wieso kommt hier Serverseitiger Quelltext, wo es sich doch um ein Javascriptproblem handelt?

    <script language="JavaScript">

    Hier fehlt das http://de.selfhtml.org/javascript/intro.htm#javascriptbereiche@title=type-Attribut.

    <!--

    Diese Kommentare kannst du auch getrost weglassen. Die sind nur da damit der Text in alten Browsern nicht angezeigt wird. Und die meisten (um nicht zu sagen "so gut wie alle") benutzen heute Browser die Javascript verstecken, vorausgesetzt es ist deaktiviert.

    Ich hoffe, dass du eine Fehlermeldung bekommst, das würde vieles erleichtern.

    So long and thanks for all the fish,
    Oku

    --
    Lehrersprüche - Schülersprüche
    Herr Brüns: "Das Primitive ist nicht zu verachten, besonders wenn man keine Ahnung hat."
    1. <!--
      Diese Kommentare kannst du auch getrost weglassen. Die sind nur da damit der Text in alten Browsern nicht angezeigt wird. Und die meisten (um nicht zu sagen "so gut wie alle") benutzen heute Browser die Javascript verstecken, vorausgesetzt es ist deaktiviert.

      Das hat nichts mit aktiviert zu tun oder nicht, sondern damit das es ganz früher Browser gab, die das script Tag nicht kannten und diese haben dann den JS Code angezeigt. Da diese Browser mit Sicherheit nicht mehr benutzt werden, ist der HTML Kommentar überflüssig.

      Struppi.

      --
      Javascript ist toll (Perl auch!)
      1. Einen schönen guten Nachmittag.

        Das hat nichts mit aktiviert zu tun oder nicht, sondern damit das es ganz früher Browser gab, die das script Tag nicht kannten und diese haben dann den JS Code angezeigt. Da diese Browser mit Sicherheit nicht mehr benutzt werden, ist der HTML Kommentar überflüssig.

        Das mit dem deaktiviert hieß eher, dass der Quelltext auch versteckt ist, wenn Javascript nicht ausgeführt wird. Ansonsten hatte ich das eigentlich genauso gemeint wie du, mich wahrscheinlich nur ungeschickt ausgedrückt.

        So long and thanks for all the fish,
        Oku

        --
        Lehrersprüche - Schülersprüche
        Herr Brüns: "Das Primitive ist nicht zu verachten, besonders wenn man keine Ahnung hat."
        1. Das hat nichts mit aktiviert zu tun oder nicht, sondern damit das es ganz früher Browser gab, die das script Tag nicht kannten und diese haben dann den JS Code angezeigt. Da diese Browser mit Sicherheit nicht mehr benutzt werden, ist der HTML Kommentar überflüssig.
          Das mit dem deaktiviert hieß eher, dass der Quelltext auch versteckt ist, wenn Javascript nicht ausgeführt wird. Ansonsten hatte ich das eigentlich genauso gemeint wie du, mich wahrscheinlich nur ungeschickt ausgedrückt.

          Stimmt.

          Ich hatte mich nur an dem Wort deaktiviert gestört, es erweckt den Eindruck, als ob es was damit zu tun hätte, ob im Browser JS aktiviert ist oder nicht. Es geht aber nur darum, dass der Browser <script> kennt oder nicht.

          Struppi.

          --
          Javascript ist toll (Perl auch!)
    1. wenn ich das update des kalenders per body onload initial aufrufe findet er die funktion update beim vorblättern nicht mehr.

    du benutzt document.write() damit überschreibst du das Dokument und somit sind auch keine JS Funktionen mehr vorhanden.

    1. wenn ich innerhalb des body das update aufrufe funktioniert es. ich habe zusätzlich eine globale variable definiert um den aufruf innerhalb des body nur beim neuladen der seite zu bewerkstelligen. irgendwie wird meine variable überschrieben und ein klich auf vor zeigt den nächsten monat und dann sofort wieder den alten.

    Da der Quelltext nicht lauffähig ist (wegen dem PHP Code) kann ihn keiner testen.

    wer kann helfen ??
    <html>

    Du hast keinen DOCTYPE?

    <head>

    es fehlen noch title und eine charset Angabe.

    <script language="JavaScript">

    das language Attribut ... naja das weißt du ja schon

    <!--

    überflüssig.

    myupdate=2;

    function update(Diff)
    {
    alert('check1 myupdate'+myupdate)

    myupdate=1;
       var now = new Date();
       switch(Diff){
       case 1:
                var Monat = now.getMonth()
                var Jahr = now.getYear()
                var MN = dstring

    Was ist dstring?

    var Wo = MN.indexOf(" ")
                Monatname = MN.substring(0,Wo)
                Jahr = eval(MN.substring(Wo+1,MN.length))

    Wieso eval()? substring Funktionert auch ohne.

    if (Monatname=="Januar"){Monat=0}
                if (Monatname=="Februar"){Monat=1}
                if (Monatname=="März"){Monat=2}
                if (Monatname=="April"){Monat=3}
                if (Monatname=="Mai"){Monat=4}
                if (Monatname=="Juni"){Monat=5}
                if (Monatname=="Juli"){Monat=6}
                if (Monatname=="August"){Monat=7}
                if (Monatname=="September"){Monat=8}
                if (Monatname=="Oktober"){Monat=9}
                if (Monatname=="November"){Monat=10}
                if (Monatname=="Dezember"){Monat=11}

    Das ist höchst unelegant zumal es mehrmals vorkommt.

    Es gäbe zwei Möglichkeiten, eine wäre z.b. ein Array zu defineren und dann eine Suchfunktion die den Index findet zu schreiben.

    var Monate = ['Januar', 'Februar', 'März', 'April' ...  ];
    Array.prototype.search = function(wort)
    {
    for(var i = 0; i < this.length; i++) if( this[i] == wort) return i;
    return -1;
    }

    var Monat = Monate.search('April');

    var Monat = Monat + 1

    Hier ist das var überflüssig, Monat ist bereits definiert und es gibt den ++ Operator: Monat++;

    dstring=Monatname+' '+Jahr
      window.document.write('<table>')

    wie gesagt, damit überschriebst du das aktuelle Dokument inklusive Skripte.

    Struppi.

    --
    Javascript ist toll (Perl auch!)