Wie hoch ist meine Liste?

Dennis Wronka

Soulcollector
Hi Leute, mit Hilfe von PHP und MySQL erstelle ich ein kleines Menue, welches mittels CSS (alle ausser IE), bzw. JS (IE) seitlich ausklappt.
Nun kann es aber, da dieses Menue aus der Datenbank kommt dazu kommen, dass es zu lang wird und unten aus der Seite herauslaeuft. Das ist natuerlich unguenstig.
Nun dachte ich, dass ich mittels JavaScript (wie auch sonst, das muss ja im Client gemacht werden) die Hoehe der des <ul>-Elementes feststelle die Startposition (Y) hinzuzaehle und falls das Ergebnis groesser als ein festgesetztes Limit ist die Liste nach oben schiebe damit sie vollstaendig sichtbar ist.
Nun habe ich folgenden Code probiert:
Code:
<script type="text/javascript">
alert(document.getElementById(\'menu'.$statics_menu['id'].'\').style.height);
</script>
(ja ich weiss, sieht komisch aus, kommt aber auch aus einer Zeile PHP)
Jedoch werden mir nur leere Alerts angezeigt, was fuer mich heisst, dass die Hoehe des Elements nicht (auf diese Weise) feststellbar ist.
Wenn style weggelassen hab kam gar "undefined" als Alert.

Bei SelfHTML hab ich auch keine wirklich brauchbaren Informationen dazu gefunden wie sie die Hoehe einer Liste feststellen laesst.

Waere nicht schlecht wenn jemand eine Idee haette, oder aber eine Bestaetigung, dass es nicht geht. Beides ist willkommen. ;)
Letzteres hiesse zwar weniger Arbeit, aber einen ungluecklichen Chef.

Nachtrag: Ich hatte ueberlegt, dass ich vielleicht mit der Eigenschaft scrollbars abfragen kann ob eben diese sichtbar sind. Jedoch weiss ich dann immer noch nicht welches der Untermenues denn zu lang ist und nach oben geschoben werden muss.
 
Habe das Gleiche Problem :D unter dem Thema:
"document.getElementById liefert keine Werte"

Ich habe vermutet das wenn man mit ....style.height arbeitet danach auch noch .value dahinter schreiben muss um den Wert zu erfragen, jedoch gibts bei mir dann ein undefined.
:(
 
Bei mir gibt's auch ein undefined wenn ich noch value dahinter setze.
Ich hab jetzt grad auch mal Werte probiert die ich wirklich per CSS definiert hab, also left, aber selbst da kam genau nichts bei rum, obwohl dieser Wert ja, wie gesagt, von mir festgelegt wurde.
 
offsetHeight hoert sich schon nicht schlecht an. Werd ich morgen gleich mal ausprobieren. Verdammtes JavaScript, hab's mir eigentlich abgewoehnt. :rolleyes:
Hatte vorhin nur nach height gesucht, und was dort so zu finden war war nicht so ganz nach meinem Geschmack. Auf offsetHeight hingegen bin ich bei SelfHTML nicht gestossen, oder habe es gekonnt uebersehen.
 
Hmm, offsetHeight bringt mir nur 0.
Was irgendwie nicht so ganz ist was mir vorgestellt hab.

Aber vielleicht liegt das daran, dass zum Zeitpunkt dieser Ausgabe die Menues unsichtbar sind.
Werd mal was testen.

Nachtrag: Wie vermutet ist offsetHeight 0 wenn das Element unsichtbar ist. Wenn ich offsetHeight nach dem Erscheinen des Untermenues ausgebe bekomme ich einen sinnvollen Wert. Jetzt werd ich mich dran machen um die Y-Position festzustellen und dann diese gegebenenfalls anzupassen.

Vielen Dank fuer die Hilfe. Ihr duerft Euch ein Eis kaufen. :)
 
Sven Mintel hat gesagt.:
...nur, wenn du es per "display:none" versteckst.
Bei "visibility:hidden" erhältst du einen Wert.
Tadaa:
Code:
ul.csssubmenu
	{
		display:none;
		position:absolute;
		margin-top:-15px;
		left:100px;
		background-color:#7b88a9;
		border:1px solid;
	}
;)
So, ich hab's jetzt schonmal so weit, dass ich feststellen kann wann ein Untermenue zu lang ist, jetzt muss ich es nur noch ganz behende nach oben schieben.
Werd mal schauen was ich dazu finde.
 
Zurück