avenarie: sliding div: IE - Error obj is undefined

hallo,
ich versuche grade fuer meine webseite einen sliding div zu erstellen, wobei die position (ausgefahren, eingefahren) in einem cookie gespeichtert wird.

In firefox laueft auch alles wie es soll, nur IE (version 6)macht probleme.
im internet explorer 6 kommt die fehlermeldung>
------------------------------------------
line 61,
char:9
error: "obj" is undefined.
------------------------------------------
function slideRight(){
        if (obj){
                if(parseInt(obj.style.left) < 0){
                        obj.style.left = parseInt(obj.style.left) + 10 + "px";
                        setTimeout("slideRight()",50);
                }
        }
}
------------------------------------------

die folge ist dass der slide im IE nicht mehr funktioniert..

wenn ich bei if(obj) im code 'obj' mit dem namen des div ersetze,(weil ich mir nicht besser zu helfen weiss) funktioniert es im internet explorer richtig, aber nicht mehr in firefox.
es ist eine pattsituation...

kann mir jemand helfen wie man das 'obj' definiert damit es in firefox und IE richtig laueft?
danke!

hier ist mein Quellcode:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
        "http://www.w3.org/TR/html4/loose.dtd">

<html lang="en">

<head>
<meta http-equiv="content-type" content="text/html; charset=utf-8">
<title>Title Goes Here</title>

<body onload="javascript:checkCookie('open')">

<script type="text/javascript">

function readCookie(name) {
var nameEQ = name + "=";
var ca = document.cookie.split(';');
for(var i=0;i < ca.length;i++) {
var c = ca[i];
while (c.charAt(0)==' ') c = c.substring(1,c.length);
if (c.indexOf(nameEQ) == 0) return c.substring(nameEQ.length,c.length);
}
return null;
}

function createCookie(name,value,days) {
if (days) {
var date = new Date();
date.setTime(date.getTime()+(days*24*60*60*1000));
var expires = "; expires="+date.toGMTString();
}
else var expires = "";
document.cookie = name+"="+value+expires+"; path=/";
}

function checkCookie(name) {
    var x = readCookie(name)
    if (x == 'false') {obj = document.getElementById("boxDiv");
        obj.style.left = "-130px";
    
    } else if (x == 'true') {
        obj = document.getElementById("boxDiv");
        obj.style.left = "0px";
    }
}

function slideRight(){
        if (obj){
                if(parseInt(obj.style.left) < 0){
                        obj.style.left = parseInt(obj.style.left) + 10 + "px";
                        setTimeout("slideRight()",50);
                }
        }
}

function slideLeft(){
        if (obj){
                if(parseInt(obj.style.left) > -130){
                        obj.style.left = parseInt(obj.style.left) - 10 + "px";
                        setTimeout("slideLeft()",50);
                }
        }
}

</script>

<style type="text/css">
#boxDiv {
position: absolute;
left: -130px;
top: 0px;
z-index: 1000;
width: 130px;
height: 180px;
background: #eaeaea;
opacity: 0.80;
filter: alpha(opacity=80);
}
p {
text-align: right;
}

</style>

</head>

<body>
<p>This is my web page</p>

<br>

<p>onclick: <a href="#" onclick="slideRight(); createCookie('open','true',0) ">slideRight</a> | <a href="#" onclick="slideLeft(); createCookie

('open','false',0)">slideLeft</a></p>

<div id="boxDiv">dies ist die Testbox</div>

</body>

</html>

  1. In firefox laueft auch alles wie es soll, nur IE (version 6)macht probleme.
    im internet explorer 6 kommt die fehlermeldung>

    line 61,
    char:9
    error: "obj" is undefined.

    Die sollte auch im Fx kommen soweit ich deinen Code überblicke.

    kann mir jemand helfen wie man das 'obj' definiert damit es in firefox und IE richtig laueft?

    So wie du alle anderen Variabeln auch deklarierst.
    var obj;

    <body onload="javascript:checkCookie('open')">

    Hier ist das javascript: Label unnötig.

    Struppi.

    1. hi struppi,

      danke fuer die hilfe aber es klappt noch nicht ganz..
      hab den code jetzt ein wenig geaendert, im IE taucht keine fehlermeldung mehr auf, aber die sliding funktion geht erst wenn man die seite "refresht" vorher nicht...
      ...kanns mir auch nicht ganz erklaeren..

      steht die variable an der falschen stelle?
      oder laeuft das skript auf deinem computer mit IE ohne probleme? vielleicht ist es ja nur hier mein lokaler arbeitspc komisch?

      hier der code>

      <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
              "http://www.w3.org/TR/html4/loose.dtd">

      <html lang="en">

      <head>
      <meta http-equiv="content-type" content="text/html; charset=utf-8">
      <title>Title Goes Here</title>

      <body onload="javascript:checkCookie('open')">

      <script type="text/javascript">

      function readCookie(name) {
      var nameEQ = name + "=";
      var ca = document.cookie.split(';');
      for(var i=0;i < ca.length;i++) {
      var c = ca[i];
      while (c.charAt(0)==' ') c = c.substring(1,c.length);
      if (c.indexOf(nameEQ) == 0) return c.substring(nameEQ.length,c.length);
      }
      return null;
      }

      function createCookie(name,value,days) {
      if (days) {
      var date = new Date();
      date.setTime(date.getTime()+(days*24*60*60*1000));
      var expires = "; expires="+date.toGMTString();
      }
      else var expires = "";
      document.cookie = name+"="+value+expires+"; path=/";
      }

      function checkCookie(name) {
          var x = readCookie(name)
          if (x == 'false') {obj = document.getElementById("boxDiv");
              obj.style.left = "-130px";
          
          } else if (x == 'true') {
              obj = document.getElementById("boxDiv");
              obj.style.left = "0px";
          }
      }

      function slideRight(){
      var obj = document.getElementById("boxDiv");
              if (obj){
                      if(parseInt(obj.style.left) < 0){
                              obj.style.left = parseInt(obj.style.left) + 10 + "px";
                              setTimeout("slideRight()",50);
                      }
              }
      }

      function slideLeft(){
      var obj = document.getElementById("boxDiv");
              if (obj){
                      if(parseInt(obj.style.left) > -130){
                              obj.style.left = parseInt(obj.style.left) - 10 + "px";
                              setTimeout("slideLeft()",50);
                      }
              }
      }

      </script>

      <style type="text/css">
      #boxDiv {
      position: absolute;
      left: -130px;
      top: 0px;
      z-index: 1000;
      width: 130px;
      height: 180px;
      background: #eaeaea;
      opacity: 0.80;
      filter: alpha(opacity=80);
      }
      p {
      text-align: right;
      }

      </style>

      </head>

      <body>
      <p>This is my web page</p>

      <br>

      <p>onclick: <a href="javascript:slideRight(); createCookie('open','true',0) ">slideRight</a>          <a href="javascript:slideLeft(); createCookie('open','false',0)">slideLeft</a></p>

      <div id="boxDiv">dies ist die Testbox</div>

      </body>

      </html>

      1. Hi,

        im IE taucht keine fehlermeldung mehr auf, aber die sliding funktion geht erst wenn man die seite "refresht" vorher nicht...

        Dann leere mal den Cache.

        MfG ChrisB

        --
        Light travels faster than sound - that's why most people appear bright until you hear them speak.
      2. Hallo,

        hab den code jetzt ein wenig geaendert, im IE taucht keine fehlermeldung mehr auf, aber die sliding funktion geht erst wenn man die seite "refresht" vorher nicht...

        und im Firefox (oder anderen Browsern) dürfte es ebenso sein.

        ...kanns mir auch nicht ganz erklaeren..

        Es ist eigentlich trivial. Es gibt doch nur eine Stelle, an der du obj überhaupt einen Wert zuweist. Naja, eigentlich zwei, aber sie liegen logisch so dicht zusammen, dass ich sie als eine betrachte:

        function checkCookie(name) {
            var x = readCookie(name)
            if (x == 'false') {obj = document.getElementById("boxDiv");
                obj.style.left = "-130px";
            
            } else if (x == 'true') {
                obj = document.getElementById("boxDiv");
                obj.style.left = "0px";
            }
        }

        Was passiert, wenn noch gar kerin Cookie gesetzt ist, also beim ersten Aufruf der Seite? Dann ist weder die Bedingung x=="false" noch x=="true" erfüllt, weil x dann null ist (und der Wert null niemals mit einem nicht-leeren String als gleich interpretiert werden kann).
        Die Abfrage ist also falsch formuliert - oder du bräuchtest noch einen dritten Fall, nämlich "weder, noch". Warum steht die Zuweisung obj = document.getElementById(...) eigentlich zweimal identisch in beiden Zweigen des if-Statements? Das kannst du ebensogut rausziehen - das wäre übrigens auch ein möglicher erster Schritt zur Lösung.

        So long,
         Martin

        --
        F: Was ist ekliger als ein angebissener Apfel mit einem Wurm drin?
        A: Ein angebissener Apfel mit einem halben Wurm.