document.all has no properties
WernerK
- javascript
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
Hallo,
es gibt browser, die verstehen nicht was "document.all" ist.
MfG. Christoph
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
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
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
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
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.
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