WernerK: document.all has no properties

Hallo,

Hier auf Selfhtm gibt es ein Beispiel mit offsetParent
Es wird mit document.all und der ID der Wert zugewiesen.

Wenn ich versuche etwas ähnliches zu machen mit einem Bild auf einem Form.

<img src="../image/need.gif" alt="needed"  id="needed" onmouseover="getX('needed');">

und dazu diese Funktion um die X Position zu bekommen.

function getX(obj,relative) {
 var x=0;
 if(typeof(document.all.obj)=="object" && document.getElementById) {
  x=document.all.obj.offsetLeft;
  if(document.all.obj.offsetParent && !relative) {
   x+=getX(document.all.obj.offsetParent);
  }
  alert(x);
  return x;
 } else  {
  return false;
 }
}//end function

Dann kommt immer die Fehlermeldung
"document.all has no properties"

Warum ist das so?

Beispiel SelfHtml:

<html><head><title>Test</title>
</head><body>
<table><tr><td><div>
<a><b id="Fett">Hier etwas Text</b></a>
</div></td></tr></table>

<script type="text/javascript">
<!--

var Eltern=document.all.Fett.offsetParent;
 while (Eltern) {
 document.write(Eltern.tagName+"<br>");
 Eltern=Eltern.offsetParent;
 }
//-->
</script>
</body></html>

Gruss
Werner

  1. Hallo,

    es gibt browser, die verstehen nicht was "document.all" ist.

    MfG. Christoph

    --
    Wo die Sprache aufhört, fängt die Musik an...
    Selfcode:  ie:( fl:| br:^ va:| ls:/ fo:| rl:? n4:) ss:) de:] js:) ch:{ sh:) mo:) zu:)
    Go to this or Go to this
    1. Hallo
      danke für eure Hilfe,

      ok ich verwende Firefox
      aber wenn der angeblich document.all nicht versteht, warum funktioniert dann das Beispiel hier in Self
      http://de.selfhtml.org/javascript/objekte/anzeige/all_offset_parent.htm

      Gruss
      Werner

      1. Hi,

        ok ich verwende Firefox
        aber wenn der angeblich document.all nicht versteht,

        es wurde nachträglich hinzugefügt, um die Inkompatibilität mit Seiten zu beheben, deren Autoren keine Ahnung hatten. Allerdings ist das Objekt "versteckt", d.h. eine Prüfung if (document.all) ergibt false.

        warum funktioniert dann das Beispiel hier in Self

        Warum sollte das relevant sein?

        Cheatah

        --
        X-Self-Code: sh:( fo:} ch:~ rl:° br:> n4:& ie:% mo:) va:) de:] zu:) fl:{ ss:) ls:~ js:|
        X-Self-Code-Url: http://emmanuel.dammerer.at/selfcode.html
        X-Will-Answer-Email: No
        X-Please-Search-Archive-First: Absolutely Yes
        1. Hi!

          ok ich verwende Firefox
          aber wenn der angeblich document.all nicht versteht,

          es wurde nachträglich hinzugefügt, um die Inkompatibilität mit Seiten zu beheben, deren Autoren keine Ahnung hatten. Allerdings ist das Objekt "versteckt", d.h. eine Prüfung if (document.all) ergibt false.

          warum funktioniert dann das Beispiel hier in Self

          Warum sollte das relevant sein?

          Ich denke, der OP wollte das verstehen, was Du ihm gerade beschrieben hast;)

          off:PP

          --
          "You know that place between sleep and awake, the place where you can still remember dreaming?" (Tinkerbell)
  2. Hi,

    Es wird mit document.all und der ID der Wert zugewiesen.

    document.all ist nur für den Internet Explorer Version 4 nötig. Jeder Browser, der danach kam, implementiert DOM. Verwende document.all also ausschließlich, um eine spezielle Kompatibilität zum IE 4 herzustellen - und niemals sonst.

    Cheatah

    --
    X-Self-Code: sh:( fo:} ch:~ rl:° br:> n4:& ie:% mo:) va:) de:] zu:) fl:{ ss:) ls:~ js:|
    X-Self-Code-Url: http://emmanuel.dammerer.at/selfcode.html
    X-Will-Answer-Email: No
    X-Please-Search-Archive-First: Absolutely Yes
  3. und dazu diese Funktion um die X Position zu bekommen.

    function getX(obj,relative) {
    var x=0;
    if(typeof(document.all.obj)=="object" && document.getElementById) {

    Das ist grundsätzlich falsch. obj ist ein Parameter, vermutlich entweder ein Objekt oder ein String. document.all.obj spricht in der IE 4 Syntax ein Objekt mit der ID 'obj' an (der IE findet aber auch andere 'obj' Objekte, aber das nur am Rande). d.h. deine Prüfung ist so vermutlich falsch.

    Wenn du auf die Option verzichten kannst, könnte die funktion auch so aussehen:

    function getX(obj) {  
    var o = typeof(obj)=="object" ? o : document.getElementById ? document.getElementById(o) : null;  
    if(o) return o.offsetLeft;  
    return null;  
    } 
    

    Struppi.

    1. Hallo struppi,
      vielen Dank.

      Wenn du auf die Option verzichten kannst, könnte die funktion auch so aussehen:

      function getX(obj) {

      var o = typeof(obj)=="object" ? o : document.getElementById ? document.getElementById(o) : null;
      if(o) return o.offsetLeft;
      return null;
      }

        
      Ich bin mit manchen JS Dingen einfach noch nicht so vertraut.  
      Ich mache nun schon seit gestern Abend an etwas herum und dabei sind so viele Fragen aufgetaucht.  
      Ursprünglich war die Funktion (habe ich im Netz gefunden) so:  
      ~~~javascript
        
      function getX(obj,relative) {  
      var x=0;  
      if(typeof(obj)=="object" && document.getElementById) {  
      x=obj.offsetLeft;  
      if(obj.offsetParent && !relative) {  
      x+=getX(obj.offsetParent);  
      } return x;  
      } else {  
      return false;  
      }  
      }//end function  
      
      

      Dazu gibt es das gleiche für die Y Position.
      Ich wollte das ausnutzen um einen Tooltip direkt neben einer Grafik anzuzeigen.
      Ich hatte es so versucht:

        
      <body>  
      ..  
      <form>  
      <img src="../logo.jpg" alt="logo" title="" id="logo" onmouseover="Tooltip(this.form.modsel,'angezeigter Text');" onmouseout="hideTooltip();">  
      <select name="modesel" id="modesel">  
      ..  
      </select>  
      
      

      Die Funktion tooltip:

        
      function Tooltip(obj,text){  
      Xpos = getX(obj,false);//true if position should be relative  
      alert(Xpos);  
      XposTip = Xpos + 200 + "px";  
      Ypos = getY(obj,false);  
      YposTip = Ypos + 5 + "px";  
      varobj = document.createElement ("div");  
      varobj.id = "mytooltip";  
      varobj.style.left = XposTip;  
      varobj.style.top = YposTip;  
      document.body.appendChild (varobj);  
      this.varobj.innerHTML = text;  
      }//function  
      
      

      Und dann kamen die Probleme.
      Mit "Tooltip(this.form.modsel,'angezeigter Text')" gab es die Fehlermeldung
      "this.forms has no properties"
      Warum diese Meldung?

      Dann hatte ich es mit
      Tooltip(document.forms.modsel,'angezeigter Text')
      versucht. Da gab es keine Fehler mehr aber "getX" brachte immer "false" zurück.

      Es müsste doch eigentlich ein Objekt zurückgeliefert werden?
      Warum schlägt die Prüfung mit
      "if(typeof(obj)=="object" fehl?

      Das alles ist für mich immer noch sehr verwirrend.
      Sorry für die vielen Fragen.

      Gruss
      Werner