HighDots Forums  

style.top / left & Firefox

Javascript (German) Programmiersprache JavaScript. (de.comp.lang.javascript)


Discuss style.top / left & Firefox in the Javascript (German) forum.



Reply
 
Thread Tools Display Modes
  #1  
Old   
Thomas Braun
 
Posts: n/a

Default style.top / left & Firefox - 10-22-2009 , 05:04 AM






Hallo,

ich habe ein wenig "Sorgen" mit einem Javascript-Kalender und dessen
Position. Hintergrund ist, das der Kalender an der Position erscheinen
soll, an der das zugehörige Kalender-Icon steht.

Das funktioniert bestens mit IE, leider aber nicht mit Firefox (3.x)

Hier erstmal der Code (ist nicht von mir sondern von Tan Ling Wee, also
nicht gleich hauen :-)

Die Schleife ermittelt erstmal die Position des Kalender-Icons:

Quote:
aTag = ctl
do {
aTag = aTag.offsetParent;
leftpos += aTag.offsetLeft;
toppos += aTag.offsetTop;
} while(aTag.tagName!="BODY");
Das scheint soweit zu funktionieren, leftpos und toppos sind bezogen auf
das Browserfenster korrekt.

Irgendwie klemmt es aber hier:

Quote:
crossobj.left = ctl.offsetLeft + leftpos
crossobj.top = ctl.offsetTop + toppos + ctl.offsetHeight
crossobj ist so belegt:

crossobj=document.getElementById("calendar").style

"calendar" ist ein div das mittels document.write() beim Laden in die Seite
geschrieben wird:

<div id='calendar' style='z-index:+999;position:absolute;visibility:hidden;'>

Nach den beiden Zeilen ist left und top trotzdem leer, der Kalender
erscheint links oben im Browserfenster.

Auch nach Recherche auf diversen Seiten komm ich nicht drauf wo der Fehler
liegen könnte.

Grüße
Thomas

Reply With Quote
  #2  
Old   
Thomas 'PointedEars' Lahn
 
Posts: n/a

Default Re: style.top / left & Firefox - 10-22-2009 , 05:46 AM






Thomas Braun wrote:

[Zitat repariert]

Quote:
ich habe ein wenig "Sorgen" mit einem Javascript-Kalender und dessen
Position. Hintergrund ist, das der Kalender an der Position erscheinen
soll, an der das zugehörige Kalender-Icon steht.

Das funktioniert bestens mit IE, leider aber nicht mit Firefox (3.x)

Hier erstmal der Code (ist nicht von mir sondern von Tan Ling Wee, also
nicht gleich hauen :-)
Dein primärer Ansprechpartner wäre demnach Tan Ling Wee gewesen. Es ist
nämlich nicht Sinn und Zweck dieser Diskussionsgruppe, anderer Leuts'
kapotte Copy-und-Pray-Scripts kostenlos zu reparieren.

Quote:
Die Schleife ermittelt erstmal die Position des Kalender-Icons:

aTag = ctl
Da sollte ein Semikolon am Zeichenende ergänzt werden (Code Style).

Quote:
do {
aTag = aTag.offsetParent;
leftpos += aTag.offsetLeft;
toppos += aTag.offsetTop;
} while(aTag.tagName!="BODY");
1. Bitte beim Posten hier

1.1. nicht Zitatzeichen zur Kennzeichnung von eigenem Quelltext
verwenden, sondern Einrückungen. Sonst weiss nachher niemand
mehr, wer was geschrieben hat.

1.2. nicht Tabulator-Zeichen verwenden, sondern Leerzeichen.
Tabulator-Zeichen werden überall anders dargestellt und
erschweren die Wiederverwendung des Codes für
Verbesserungsvorschläge.

2. Die Iteration über offsetParent ist unzuverlässig und in den meisten
Fällen nicht nötig. Wenn man es doch macht, sind Ränder, Rahmen und
Innenabstände (Paddings) zu berücksichtigen.

Quote:
Das scheint soweit zu funktionieren, leftpos und toppos sind bezogen auf
das Browserfenster korrekt.
Für geeignete Werte von "korrekt".

Quote:
Irgendwie klemmt es aber hier:

crossobj.left = ctl.offsetLeft + leftpos
crossobj.top = ctl.offsetTop + toppos + ctl.offsetHeight

crossobj ist so belegt:

crossobj=document.getElementById("calendar").style
Das dürfte im IE auch nur im Kompatibilitätsmodus funktionieren.
Wahrscheinlich ist Dein Markup nicht gültig; insbesondere fe lt
wahrscheinlich die DOCTYPE-Deklaration oder ist falsch, was den
Wechsel in den Kompatibilitätsmodus auslöst: <http://validator.w3.org/>

Syntaktisch korrekt und daher auch in Firefox funktionierend, ist:

crossobj.left = (ctl.offsetLeft + leftpos) + "px";
crossobj.top = (ctl.offsetTop + toppos + ctl.offsetHeight) + "px";

Denn die style-Eigenschaft implementiert das CSSStyleDeclaration-Interface,
und in CSS benötigen Längenangaben != 0 eine Einheit (hier: Pixel = "px").

Aufgrund schlechter Erfahrungen mit Opera referenziere ich ausserdem das
entsprechende Objekt immer direkt, d.h.

var crossobj = document.getElementById("calendar");
crossobj.style.left = ...;

usw. Mag jedoch sein, dass das inzwischen keine Rolle mehr spielt.

Quote:
"calendar" ist ein div das mittels document.write() beim Laden in die
Seite geschrieben wird:

div id='calendar'
style='z-index:+999;position:absolute;visibility:hidden;'
`z-index:+999' ist zwar syntaktisch korrekt, ich würde jedoch das unübliche
`+' weglassen.


PointedEars

Reply With Quote
  #3  
Old   
Martin Honnen
 
Posts: n/a

Default Re: style.top / left & Firefox - 10-22-2009 , 05:50 AM



Thomas Braun wrote:
Quote:
Hallo,

ich habe ein wenig "Sorgen" mit einem Javascript-Kalender und dessen
Position. Hintergrund ist, das der Kalender an der Position erscheinen
soll, an der das zugehörige Kalender-Icon steht.

Das funktioniert bestens mit IE, leider aber nicht mit Firefox (3.x)

Hier erstmal der Code (ist nicht von mir sondern von Tan Ling Wee, also
nicht gleich hauen :-)

Die Schleife ermittelt erstmal die Position des Kalender-Icons:

aTag = ctl
do {
aTag = aTag.offsetParent;
leftpos += aTag.offsetLeft;
toppos += aTag.offsetTop;
} while(aTag.tagName!="BODY");
Besser ist es, die offsetLeft/Top Werte zu addieren, bis offsetParent
null ist.

Quote:
Das scheint soweit zu funktionieren, leftpos und toppos sind bezogen auf
das Browserfenster korrekt.

Irgendwie klemmt es aber hier:

crossobj.left = ctl.offsetLeft + leftpos
crossobj.top = ctl.offsetTop + toppos + ctl.offsetHeight
element.style.left/top erwartet einen CSS-Wert für diese Eigenschaften,
der aus einer Zahl _und_ einer Einheit besteht. Also etwa
crossobj.left = ctl.offsetLeft + leftpos + 'px';

--

Martin Honnen
http://msmvps.com/blogs/martin_honnen/

Reply With Quote
  #4  
Old   
Thomas Braun
 
Posts: n/a

Default Re: style.top / left & Firefox - 10-22-2009 , 06:54 AM



Martin Honnen wrote:

Quote:
element.style.left/top erwartet einen CSS-Wert für diese Eigenschaften,
der aus einer Zahl _und_ einer Einheit besteht. Also etwa
crossobj.left = ctl.offsetLeft + leftpos + 'px';
Danke, daran liegt es... wieder was dazugelernt.

Grüße
Thomas

Reply With Quote
  #5  
Old   
Thomas Braun
 
Posts: n/a

Default Re: style.top / left & Firefox - 10-22-2009 , 06:59 AM



Thomas 'PointedEars' Lahn wrote:

Quote:
Thomas Braun wrote:

[Zitat repariert]
Welches Zitat?

Quote:
Dein primärer Ansprechpartner wäre demnach Tan Ling Wee gewesen. Es ist
nämlich nicht Sinn und Zweck dieser Diskussionsgruppe, anderer Leuts'
kapotte Copy-und-Pray-Scripts kostenlos zu reparieren.
Keiner hier wird zu irgendwas gezwungen.

Quote:
1. Bitte beim Posten hier

1.1. nicht Zitatzeichen zur Kennzeichnung von eigenem Quelltext
verwenden, sondern Einrückungen. Sonst weiss nachher niemand
mehr, wer was geschrieben hat.
Werd ich fürderhin beachten.

Quote:
1.2. nicht Tabulator-Zeichen verwenden, sondern Leerzeichen.
Mist, cut and paste - hatte ich nicht bemerkt.

Quote:
2. Die Iteration über offsetParent ist unzuverlässig und in den meisten
Fällen nicht nötig.
Die alternative wäre?

Quote:
Wenn man es doch macht, sind Ränder, Rahmen und
Innenabstände (Paddings) zu berücksichtigen.
hmmm... obiges funktioniert für meine Zwecke hinreichend gut, daher
verzichte ich auf zusätzliceh Komplexität.

Quote:
Denn die style-Eigenschaft implementiert das CSSStyleDeclaration-Interface,
und in CSS benötigen Längenangaben != 0 eine Einheit (hier: Pixel = "px").
Mann, bin ich doof - aber jetzt geht es ;-)

Quote:
`z-index:+999' ist zwar syntaktisch korrekt, ich würde jedoch das unübliche
`+' weglassen.
Du gehst mir oft zu sehr ins Detail und beantwortest vor allem zu viele
garnicht gestellte Fragen, trotzdem Danke :-)

Grüße
Thomas

Reply With Quote
  #6  
Old   
Thomas 'PointedEars' Lahn
 
Posts: n/a

Default Re: style.top / left & Firefox - 10-22-2009 , 07:33 AM



Thomas Braun wrote:

Quote:
Thomas 'PointedEars' Lahn wrote:
Thomas Braun wrote:
[Zitat repariert]

Welches Zitat?
Deins.

Quote:
Dein primärer Ansprechpartner wäre demnach Tan Ling Wee gewesen. Es ist
nämlich nicht Sinn und Zweck dieser Diskussionsgruppe, anderer Leuts'
kapotte Copy-und-Pray-Scripts kostenlos zu reparieren.

Keiner hier wird zu irgendwas gezwungen.
Stimmt. Ich hätte Dein Posting auch ignorieren können. Merkst Du was?

Quote:
1.2. nicht Tabulator-Zeichen verwenden, sondern Leerzeichen.

Mist, cut and paste - hatte ich nicht bemerkt.

2. Die Iteration über offsetParent ist unzuverlässig und in den meisten
Fällen nicht nötig.

Die alternative wäre?
Relative Positionierung.

Quote:
`z-index:+999' ist zwar syntaktisch korrekt, ich würde jedoch das
unübliche `+' weglassen.

Du gehst mir oft zu sehr ins Detail und beantwortest vor allem zu viele
garnicht gestellte Fragen,
Usenet ist kein Wunschkonzert.

<http://dcljs.de/>

Quote:
trotzdem Danke :-)
Gern geschehen.


PointedEars

Reply With Quote
  #7  
Old   
Thomas Braun
 
Posts: n/a

Default Re: style.top / left & Firefox - 10-22-2009 , 09:22 AM



Thomas 'PointedEars' Lahn wrote:

Quote:
Thomas Braun wrote:

Thomas 'PointedEars' Lahn wrote:
Thomas Braun wrote:
[Zitat repariert]

Welches Zitat?

Deins.

Da ich nichts zitiert habe, gab es auch nix zu reparieren.

Quote:
Stimmt. Ich hätte Dein Posting auch ignorieren können. Merkst Du was?
Ja - du hast zu viel freie Zeit - so wie ich auch ;-)

Quote:
2. Die Iteration über offsetParent ist unzuverlässig und in den meisten
Fällen nicht nötig.

Die alternative wäre?

Relative Positionierung.
Für diesen Anwendungsfall denke ich eher ungeeignet.

Der Kalender steht neben einem (oder mehreren) Datums-Eingabefeld(ern), bei
relativer Positionierung müßte man also das <div> mehrfach statisch in die
Seite einbauen (-> zusätzlicher Traffic), bzw. mehrfach dynamisch an den
richtigen Stellen der Seite (versteckt) plazieren.

Da nehme ich lieber ein paar Pixel Fehlpositionierung in Kauf

Quote:
Usenet ist kein Wunschkonzert.

http://dcljs.de/
Auch nett finde ich in dem Zusammenhang das Wort "Satzung", gibt es denn
auch eine dcljs Jahreshauptversammlung und einen Vorstand?

Dabei fällt mir noch eins auf:

Quote:
Es ist nämlich nicht Sinn und Zweck dieser Diskussionsgruppe, anderer Leuts'
kapotte Copy-und-Pray-Scripts kostenlos zu reparieren.
Bitte lies dazu nochmal zum Vergleich hier http://dcljs.de/#satzung

Thomas

Reply With Quote
  #8  
Old   
Thomas 'PointedEars' Lahn
 
Posts: n/a

Default Re: style.top / left & Firefox - 10-22-2009 , 09:36 AM



Thomas Braun wrote:

Quote:
Thomas 'PointedEars' Lahn wrote:
Thomas Braun wrote:
Thomas 'PointedEars' Lahn wrote:
Thomas Braun wrote:
[Zitat repariert]

Welches Zitat?
Deins.

Da ich nichts zitiert habe, gab es auch nix zu reparieren.
Du hast den von Dir verwendeten Quelltext *zitiert* --
unpassender-/unsinnigerweise, wie ich bereits anmerkte. Die
unnötigen/störenden Zitatzeichen habe ich entfernt und fand es höflich,
darauf hinzuweisen, dass ich Deinen Text (den zitierten) geändert habe.

Quote:
2. Die Iteration über offsetParent ist unzuverlässig und in den meisten
Fällen nicht nötig.

Die alternative wäre?

Relative Positionierung.

Für diesen Anwendungsfall denke ich eher ungeeignet.

Der Kalender steht neben einem (oder mehreren) Datums-Eingabefeld(ern),
bei relativer Positionierung müßte man also das <div> mehrfach statisch in
die Seite einbauen (-> zusätzlicher Traffic), bzw. mehrfach dynamisch an
den richtigen Stellen der Seite (versteckt) plazieren.
Nein.

Quote:
Da nehme ich lieber ein paar Pixel Fehlpositionierung in Kauf
Non sequitur.

Quote:
Usenet ist kein Wunschkonzert.

http://dcljs.de/

Auch nett finde ich in dem Zusammenhang das Wort "Satzung", gibt es denn
auch eine dcljs Jahreshauptversammlung und einen Vorstand?
Nein, "Satzung" ist eine missglückte Eindeutschung von "Charta". Jede
Newsgroup hat eine. Sie wird üblicherweise bei der Einrichtung der
Newsgroup definiert (in de.ALL: zur Abstimmung gestellt) und nur noch
in Ausnahmefällen geändert.

Daher:

Quote:
Dabei fällt mir noch eins auf:

Es ist nämlich nicht Sinn und Zweck dieser Diskussionsgruppe, anderer
Leuts' kapotte Copy-und-Pray-Scripts kostenlos zu reparieren.

Bitte lies dazu nochmal zum Vergleich hier http://dcljs.de/#satzung
Vgl. <http://praast.de/ffq/scriptsuche/>. Entsprechend war meine Bemerkung
zu verstehen.


F'up2 poster

PointedEars

Reply With Quote
Reply




Thread Tools
Display Modes

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

vB code is On
Smilies are On
[IMG] code is On
HTML code is Off



Powered by vBulletin Version 3.5.4
Copyright ©2000 - 2009, Jelsoft Enterprises Ltd.