marco: Scriptfehler - Object erwartet - warum?

Hallo zusammen.

Ich habe hier ein Script. Es bringt mir immer eine Fehlermeldung. Objekt erwartet. Und ich weiß nicht warum. Kann mir jemand helfen?

<script language="JavaScript">
function moveLayer()
{
 if(typeof(document.all) == 'object')
 {
  a = document.all.lay1.style.left;
  a = parseInt(a.substr(0,a.search('px')))+1;
  document.all.lay1.style.left = a+'px';
  if(a <= 500){window.setTimeout('moveLayer()',100);}
 }
 if(typeof(document.getElementById('lay1')) == 'object' &&
   typeof(document.all) != 'object')
 {
  a = document.getElementById('lay1').style.left;
  a = parseInt(a.substr(0,a.search('px')))+1;
  document.getElementById('lay1').style.left = a+'px';
  if(a <= 500){window.setTimeout('moveLayer()',100);}
 }
 if(typeof(document.lay1) == 'object')
 {
  document.lay1.left++;
  if(document.lay1.left <= 500){window.setTimeout('moveLayer()',100);}
 }
 if(typeof(window.opera) == 'object')
 {
  document.all.lay1.style.left++;
  if(document.all.lay1.style.left <= 500){window.setTimeout('moveLayer()',100);}
 }
}
</script>

  1. Hi

    zuerst mal ein Tipp: Benutze zum debuggen Mozilla

    dann das nächste:

    Ich habe dein Script 1:1 benutzt und in folgende HTML-Seite eingefügt - geht doch!

    Vielleicht gibts bei dir lay1 nicht?

    <HTML>
    <HEAD>
    <TITLE>TEST</TITLE>
    <script language="JavaScript">
    function moveLayer()
    {
     if(typeof(document.all) == 'object')
     {
     a = document.all.lay1.style.left;
     a = parseInt(a.substr(0,a.search('px')))+1;
     document.all.lay1.style.left = a+'px';
     if(a <= 500){window.setTimeout('moveLayer()',100);}
     }
     if(typeof(document.getElementById('lay1')) == 'object' &&
      typeof(document.all) != 'object')
     {
     a = document.getElementById('lay1').style.left;
     a = parseInt(a.substr(0,a.search('px')))+1;
     document.getElementById('lay1').style.left = a+'px';
     if(a <= 500){window.setTimeout('moveLayer()',100);}
     }
     if(typeof(document.lay1) == 'object')
     {
     document.lay1.left++;
     if(document.lay1.left <= 500){window.setTimeout('moveLayer()',100);}
     }
     if(typeof(window.opera) == 'object')
     {
     document.all.lay1.style.left++;
     if(document.all.lay1.style.left <= 500){window.setTimeout('moveLayer()',100);}
     }
    }
    </script>
    </HEAD>
    <BODY onload="moveLayer();">
    <div id="lay1" style="position:absolute; top:30px; left:300px;">d</div>

    </BODY>
    </HTML>

    Viel Spaß mit

    MfG TOM

    P.S.: Dann wird das Object wohl in einer anderen Funktion erwartet werden?

    1. Erstmal Danke für die Antwort.

      zuerst mal ein Tipp: Benutze zum debuggen Mozilla

      Hat Mozilla besondere Debugging-Funktionen? Hab ihn zuhause auf dem Rechner. Ich probiers heute abend mal aus.

      Ich habe dein Script 1:1 benutzt und in folgende HTML-Seite eingefügt - geht doch!

      Per Copy&Paste habe ich jetzt deine HTML Seite benutzt. Sie funktioniert. Der Unterschied zu meiner HTML Seite war. Das Script befand sich im Body-Bereich. Des Weiteren habe ich die Animation mit einem Link gestartet.
      Aber das dürfte doch zu keiner Fehlermeldung führen, oder?

      1. Erstmal Danke für die Antwort.

        Bitte gern.

        zuerst mal ein Tipp: Benutze zum debuggen Mozilla

        Hat Mozilla besondere Debugging-Funktionen? Hab ihn zuhause auf dem Rechner. Ich probiers heute abend mal aus.

        Tools>WebDevelopement>....

        Ich habe dein Script 1:1 benutzt und in folgende HTML-Seite eingefügt - geht doch!

        Per Copy&Paste habe ich jetzt deine HTML Seite benutzt. Sie funktioniert. Der Unterschied zu meiner HTML Seite war. Das Script befand sich im Body-Bereich. Des Weiteren habe ich die Animation mit einem Link gestartet.
        Aber das dürfte doch zu keiner Fehlermeldung führen, oder?

        Also globale Funktionen _müssen_ im Header sein. sonst kommt genau deine Fehlermeldung "Objekt erwartet", weil er deine Funktion nicht kennt!

        Das mit Link is egal

        MfG TOM

        1. Nochwas. Das Script sollte eigentlich im Netscape 4.7 funktionieren. Aber es tut es nicht. Liegt das an meiner Browserkonfiguration, oder geht es bei dir auch nicht?

          Ich muss da nochmal nachlesen, was globale Funktionen betrifft. Bin ein JavaScript-Neuling. ;-)

          1. Hi

            also ich hab jetzt keine Zeit mehr mich darum zu kümmern.

            aber zuerst mal: Google ist dein Freund.

            Danach:

            <script language="JavaScript">
            function moveLayer()
            {
             if(typeof(document.all) == 'object')
             {
             a = document.all.lay1.style.left;
             a = parseInt(a.substr(0,a.search('px')))+1;
             document.all.lay1.style.left = a+'px';
             if(a <= 500){window.setTimeout('moveLayer()',100);}
             }

            Darüber beschwert sich NS4: (in adresszeile mal javascript: eintippen!)

            if(typeof(document.getElementById('lay1')) == 'object' &&
              typeof(document.all) != 'object')

            Weil er document.getElementById nicht kennt...

            ich würde statt if(typeof(document.getElementById('lay')) = 'object')

            einfach nur schreiben if(document.getElementById)

            {
             a = document.getElementById('lay1').style.left;
             a = parseInt(a.substr(0,a.search('px')))+1;
             document.getElementById('lay1').style.left = a+'px';
             if(a <= 500){window.setTimeout('moveLayer()',100);}
             }

            Das würde den NS4 betreffen, der mit layern arbeitet:
            ABer soweit kommt er ja gar net, weil er ja da oben schon aussteigt.

            if(typeof(document.lay1) == 'object')
             {
             document.lay1.left++;
             if(document.lay1.left <= 500){window.setTimeout('moveLayer()',100);}
             }
             if(typeof(window.opera) == 'object')
             {
             document.all.lay1.style.left++;
             if(document.all.lay1.style.left <= 500){window.setTimeout('moveLayer()',100);}
             }
            }

            MfG TOM

            1. Tom. Sorry, wenn ich deine Zeit gestohlen habe. Ich werde mich jetzt mal intensiv damit beschäftigen. Ich werde schon irgendwie klar kommen. Vielen, vielen Dank für das ausführliche Posting. Ich wünsch dir noch eine schönen Tag.

              marco

              1. Tom. Sorry, wenn ich deine Zeit gestohlen habe.

                Schon ok - bekomm ja Geld dafür *lach*.

                Ich werde mich jetzt mal intensiv damit beschäftigen.

                Würd ich dir auch raten. Vielleicht tut ein Buch nicht schlecht?

                Ich werde schon irgendwie klar kommen.

                Denk ich auch.

                Vielen, vielen Dank für das ausführliche Posting. Ich wünsch dir noch eine schönen Tag.

                Danke - ebenfalls

                marco

                Greets aus Erlangen
                     TOM