molily: Probleme mit offsetLeft (falsche Werte, FF3.5, FF4...)

Beitrag lesen

Hallo,

du unterliegst wohl einem Missverständnis. http://de.selfhtml.org/javascript/objekte/all.htm#offset_top@title=offsetLeft/Top liefern dir den Abstand lediglich zu dem Element, welches in http://de.selfhtml.org/javascript/objekte/all.htm#offset_parent@title=offsetParent gespeichert ist.

offsetParent ist hier das table-Element. Du müsstest dich zumindest durch alle offsetParents durchhangelt, um die Koordinaten relativ zu den Dokumentgrenzen zu bekommen. Wenn du noch mit Positionierung oder sonstiger Verschiebung arbeitest, dann wird das ganze noch komplizierter.

Einfache Variante:
http://www.quirksmode.org/js/findpos.html
Bessere Varianten aus größeren Bibliotheken, vor allem mit getBoundingClientRect:
https://github.com/jquery/jquery/blob/master/src/offset.js
https://github.com/sstephenson/prototype/blob/master/src/prototype/dom/layout.js#L1011
https://github.com/sstephenson/prototype/blob/master/src/prototype/dom/layout.js#L1190

Das ist auf die eine oder andere Art die Hölle. Wenn du das wirklich robust haben willst, schreib es lieber nicht selber, sondern verwende existierende Umsetzungen.

var htmlObj = document.getElementById('calendar_cell'+i);

left = htmlObj.offsetLeft;
  top = htmlObj.offsetTop;

width = htmlObj.offsetWidth;
  height = htmlObj.offsetHeight;

Verwende unbedingt lokale Variablen! Vergesse nicht das »var« vor der Variablendeklaration.
Du versuchst hier die globale Variable window.top zu überschreiben. Kein Wunder, das sich manche Browser darüber beschweren. Andere ignorieren es einfach.

Mathias