IE Bug bei margin-change per javascript
stewe
- javascript
Hallo zusammen
Folgendes Problem: (Ich habe bei google nichts gescheites gefunden, vielleicht auch weil ich nicht die richtigen Stichwörter fand)
Ich habe ein menü, in dem sich per javascript bei klick auf einen der buttons gleich unterhalb ein untermenü öffnet, das die anderen menüpunkte nach unten schiebt. (alles css changes per display: )
bei einem zweiten klick oder bei einem klick auf einen anderen button schliesst es sich wieder. nun ändert sich bei beiden prozessen der margin des <li></li> elements, in dem sich die subliste befindet. (bei geöffneter subliste ist das nächst folgende <li>-element direkt angrenzend, bei geschlossener hat es einen abstand).
in firefox funktioniert das ganze einwandfrei. nur der internet explorer ist irgendwie nicht dazu fähig: obwohl der display: und der margin: - befehl in der gleichen funktion untereinander liegen, führt er jeweils nur den display-befehl sofort auf und verzögert den margin:-befehl auf den moment, in dem man das nächste mal über das element fährt (das heisst, er wird dann doch ausgeführt). dies sogar, wenn der margin VOR dem display ausgeführt werden sollte im javascript.
ist dies ein bekannter bug - gibts einen workaround?
vielen dank
das ist ein teil der javascript-funktion:
function close( _This ){
_This.parentNode.nextSibling.style.marginTop="10px";
_This.parentNode.childNodes[1].style.display="none";
};
function open( _This ){
_This.parentNode.nextSibling.style.marginTop="0px";
_This.parentNode.childNodes[1].style.display="block";
};
function close( _This ){
_This.parentNode.nextSibling.style.marginTop="10px"; _This.parentNode.childNodes[1].style.display="none"; }; function open( _This ){ _This.parentNode.nextSibling.style.marginTop="0px"; _This.parentNode.childNodes[1].style.display="block"; };
Das sind so typische Funktionen, die im IE in die Hose gehen. Wo ist überprüfst du, dass du die richtigen Elemente ansprichst?
Struppi.
function close( _This ){
_This.parentNode.nextSibling.style.marginTop="10px"; _This.parentNode.childNodes[1].style.display="none"; }; function open( _This ){ _This.parentNode.nextSibling.style.marginTop="0px"; _This.parentNode.childNodes[1].style.display="block"; };
>
> Das sind so typische Funktionen, die im IE in die Hose gehen. Wo ist überprüfst du, dass du die richtigen Elemente ansprichst?
>
> Struppi.
das javascript hängt den korrekten elementen ein onClick="click(this)" an. die funktion click entscheidet dann, was geschehen soll - öffnen/schliessen was auch immer.
das problem kann aber nicht da liegen, da das display funktioniert - und auch das margin, allerdings wie gesagt im ie nur mit verspätung...
das problem kann aber nicht da liegen, da das display funktioniert - und auch das margin, allerdings wie gesagt im ie nur mit verspätung...
Du kannst das prüfen oder auch nicht, im Zweifel würde ich eine Prüfung vorziehen, da die Browser die Knoten z.T. unterschiedlich zählen.
Struppi.
das problem kann aber nicht da liegen, da das display funktioniert - und auch das margin, allerdings wie gesagt im ie nur mit verspätung...
Du kannst das prüfen oder auch nicht, im Zweifel würde ich eine Prüfung vorziehen, da die Browser die Knoten z.T. unterschiedlich zählen.
Bitte gehe auf mein Problem ein - Wenn du mein erstes Posting gelesen hättest, wüsstest du dass alles perfekt funktioniert in firefox, in IE aber der margin erst verspätet verstellt wird (display funktioniert auch problemlos) - darum ja auch "IE BUG", weils meines Erachtens nichts anderes sein kann.
dankeschön.
ps. da gibts für die browser nichts verschieden zu zählen, da hat es keinen text oder sonst was dazwischen wo man irgendwo leerschläge/umbrüche o.ä. auch als neue elemente zählen könnte.
Hi,
Bitte gehe auf mein Problem ein - Wenn du mein erstes Posting gelesen hättest, wüsstest du dass alles perfekt funktioniert in firefox, in IE aber der margin erst verspätet verstellt wird (display funktioniert auch problemlos) - darum ja auch "IE BUG", weils meines Erachtens nichts anderes sein kann.
Dann liefere bitte brauchbare Informationen - bspw. ein Online-Beispiel, an dem man das beschriebene Verhalten nachvollziehen kann.
MfG ChrisB
Dann liefere bitte brauchbare Informationen - bspw. ein Online-Beispiel, an dem man das beschriebene Verhalten nachvollziehen kann.
voila: testnavigation
hat einen moment gedauert weil ichs schnell zusammenkopieren musste (läuft bei mir local) - darum funktionieren klickbare links auch nicht.
Anklickbar fürs submenü sind hier "Über Uns" und "Angebot".
Ich hoff' ich hab nen Fehler gemacht - Bugs gehn auf die Nerven :)
gruss
voila: testnavigation
hat einen moment gedauert weil ichs schnell zusammenkopieren musste (läuft bei mir local) - darum funktionieren klickbare links auch nicht.
Anklickbar fürs submenü sind hier "Über Uns" und "Angebot".
Du weißt aber schon, wo der IE seine Fehlermeldung anzeigt? Ich krieg nämlich eine.
Struppi.
voila: testnavigation
hat einen moment gedauert weil ichs schnell zusammenkopieren musste (läuft bei mir local) - darum funktionieren klickbare links auch nicht.
Anklickbar fürs submenü sind hier "Über Uns" und "Angebot".Du weißt aber schon, wo der IE seine Fehlermeldung anzeigt? Ich krieg nämlich eine.
im ernst? nein, bei mir zeigts keine an :o - klär mich bitte auf.
im ernst? nein, bei mir zeigts keine an :o - klär mich bitte auf.
Er zeigt auch keine an, sondern du musst sie erstmal finden, eigentlich eine Grundvorrausetzung (ich kann mir nicht vorstellen, wie ich ohne das Anzeigen der Fehlermeldungen in JS Programmieren sollte). Der IE zeigt die Fehler in der Statusleiste mit einem gelben Dreieck und darauf einfach mal Doppelklicken.
Struppi.
im ernst? nein, bei mir zeigts keine an :o - klär mich bitte auf.
Er zeigt auch keine an, sondern du musst sie erstmal finden, eigentlich eine Grundvorrausetzung (ich kann mir nicht vorstellen, wie ich ohne das Anzeigen der Fehlermeldungen in JS Programmieren sollte). Der IE zeigt die Fehler in der Statusleiste mit einem gelben Dreieck und darauf einfach mal Doppelklicken.
danke weis ich - bei mir steht da "Fertig" - weils wie gesagt keine fehlermeldung anzeigt.
danke weis ich - bei mir steht da "Fertig" - weils wie gesagt keine fehlermeldung anzeigt.
Das getAttribute wirft bei mir einen Fehler und das setAttribute funktioniert nicht. Auf die Klasse greifst du mit className zu und den Event musst du mit einem closure zuweisen.
Struppi.
Das getAttribute wirft bei mir einen Fehler und das setAttribute funktioniert nicht. Auf die Klasse greifst du mit className zu und den Event musst du mit einem closure zuweisen.
die funktionieren bei dir überhaupt nicht? also du kannst auch das submenü nicht öffnen? wow, das ist seltsam^^ welche ie version hast du?
classname ist n'guter vorschlag, mit dem closure versuch ichs morgen.
danke
Das getAttribute wirft bei mir einen Fehler und das setAttribute funktioniert nicht. Auf die Klasse greifst du mit className zu und den Event musst du mit einem closure zuweisen.
die funktionieren bei dir überhaupt nicht? also du kannst auch das submenü nicht öffnen? wow, das ist seltsam^^ welche ie version hast du?
IE 6 (gestern abend) und IE 7 (jetzt) - in beiden die gleich Fehlermeldung. (getAttribute(..) is null o.ä.). Das ist eine bekannte Schwäche des IE.
Struppi.
Das getAttribute wirft bei mir einen Fehler und das setAttribute funktioniert nicht. Auf die Klasse greifst du mit className zu und den Event musst du mit einem closure zuweisen.
die funktionieren bei dir überhaupt nicht? also du kannst auch das submenü nicht öffnen? wow, das ist seltsam^^ welche ie version hast du?
IE 6 (gestern abend) und IE 7 (jetzt) - in beiden die gleich Fehlermeldung. (getAttribute(..) is null o.ä.). Das ist eine bekannte Schwäche des IE.
Struppi.
ah alles klar. meine beobachtung stammt aus IE 8 - dort gibts keinen fehler mehr sondern dieses seltsame verhalten mit der verzögerung des margin-setzens.
ie 6/7 muss ich mir dringend noch besorgen für weiteres austesten^^
vielen dank für deine hilfe!
ah alles klar. meine beobachtung stammt aus IE 8 - dort gibts keinen fehler mehr sondern dieses seltsame verhalten mit der verzögerung des margin-setzens.
Das glaube ich nicht, das ausgerechnet der aktuellste IE sich am falschesten bei so einer trivialen Sache verhält.
Struppi.
Das glaube ich nicht,das ausgerechnet der aktuellste IE sich am falschesten bei so einer trivialen Sache verhält.
na wenns nicht so wär wäre ich ja kaum hier im forum.
ich habe den code jetzt deinen vorschlägen nach für ie6/ie7 optimiert - funktionieren diese dinge jetzt bei dir? (habe hier keine möglichkeit für ie6/7 zu überprüfen - und ja ich weis ich werde dies noch fürs gesamte design machen müssen)
in ie8 und firefox funktionierts noch genau wie vorher-was auch bedeutet dass das von mir beschriebene problem (erwartungsgemäss) im ie auch immer noch vorhanden ist. an was liegts?
dankeschön.
in ie8 und firefox funktionierts noch genau wie vorher-was auch bedeutet dass das von mir beschriebene problem (erwartungsgemäss) im ie auch immer noch vorhanden ist. an was liegts?
Keine Ahnung. Ich hab hier nur den IE 6 und das Testskript funktioniert einwandfrei.
Und ich habe schon mal gesagt, wenn du einen Fehler suchst, wäre es einfachsten, du würdest testen, welche Elemente du hast.
Struppi.
»»
Und ich habe schon mal gesagt, wenn du einen Fehler suchst, wäre es einfachsten, du würdest testen, welche Elemente du hast.
Ich sehe schon ein, dass das herumhangeln im dom heikel ist, du solltest aber auch einsehen, dass in diesem Fall das Problem offensichtlich nicht da liegt.
Ich bin mir jetzt doch sehr sicher, dass es sich um ein IE8-Problem handelt.
Denn wenn ich anstatt im javascript margin und display zu setzen, nur den className ändere und der Rest im css gesetzt wird, ist das Problem weg und alles funktioniert einwandfrei.
Also folgendermassen:
function close( _This ){
_This.parentNode.className="";
};
function open( _This ){
_This.parentNode.className="open";
};
body.jsEnabled #mainmenu ul{display:none;}
body.jsEnabled #mainmenu li{margin-bottom:10px;}
body.jsEnabled #mainmenu li li{margin-bottom:0px;}
body.jsEnabled #mainmenu li.open{margin-bottom:0px;}
body.jsEnabled #mainmenu li.open ul{display:block;}
Beste Grüsse
Das getAttribute wirft bei mir einen Fehler und das setAttribute funktioniert nicht. Auf die Klasse greifst du mit className zu und den Event musst du mit einem closure zuweisen.
btw. Könntest du mir erläutern, was in der aktuellen Variante für Probleme sorgt?
Vielen Dank
stewe
Hi,
voila: testnavigation
Wenn ich das aus dem Browser heraus abspeichere, um es lokal testen zu können, tritt genau das ein, wo vor du schon gewarnt wurdest:
Ich bekomme Fehlermeldungen (schon während der Initialisierung), weil die childNodes nicht das sind, was das Script erwartet.
Ja, das mag in diesem Falle am Abspeichern liegen, weil die Browser (hab's mit IE und mit FF abgespeichert, beide Male selbes Ergebnis) da Whitespace einfügen oder rauslöschen. Aber es zeigt genau das, worauf du hingewiesen wurdest: Sich über firstChild, childNodes etc. durch's DOM zu hangeln, ist weitaus fehleranfälliger, als Elemente bspw. über ihren Tag-Namen auszuwählen.
Den Versuch, das zu korrigieren, habe ich aber schon nach kurzer Zeit wieder aufgegeben - weil mir der HTML-Code viel zu chaotisch ist. Wenn ich sowas sehe,
<li class="item65"><a href="/kam/index.php/angebot/downloads.html"><span><font class="normal_nav">Downloads</font><br /><font class="small_nav">(Kursmaterialien)</font></span></a></li>
dann weiss ich kaum, was ich machen soll, um mein Abendessen drin zu behalten.
Das solltest du mal sauber aufbauen.
Erst mal statisch (ohne JS), ein simples Menü, mit CSS wie gewünscht formatiert, ohne zusätzliche Elemente, die den Code aufblähen. Und darauf dann anschliessend mit JavaScript aufsetzen.
Ich sehe bspw. keinen offensichtlichen Grund, warum du nicht mit LIs und darin liegenden A-Elementen auskommst; was sollen die ganzen SPAN- und auch noch FONT-Elemente da?
MfG ChrisB
Hi,
Das solltest du mal sauber aufbauen.
http://chrisb.bplaced.net/test/stewe_mod.htm
Sicher noch verbesserungswürdig ... aber sicher auch schon eine Verbesserung gegenüber deinem Code.
MfG ChrisB
Hallo ChrisB!
Sicher noch verbesserungswürdig ... aber sicher auch schon eine Verbesserung gegenüber deinem Code.
Außer Redundanz im CSS:
* { margin:0; padding:0; }
#mainmenu li ul li { margin:0 0 0 0; padding:0; /*(...)*/}
und nicht mehr stimmende Abständen zw. immer 2 Menüpunkten nach dem ein Untermenüpunkt geöffnet und geschlossen wurde, funzt™'s einwandfrei ;)
Letzeres werde ich aber erst untersuchen können, wenn ich wach bin :)
Viele Grüße aus Frankfurt/Main,
Patrick
Hi,
Außer Redundanz im CSS:
#mainmenu li ul li { margin:0 0 0 0; padding:0; /(...)/}
#mainmenu li haben ein paading und hatten vorher auch mal ein margin, deshalb hab ich die hier zurückgesetzt für die darin liegenden LI.
> und nicht mehr stimmende Abständen zw. immer 2 Menüpunkten nach dem ein Untermenüpunkt geöffnet und geschlossen wurde
Ich entnahm dem Original, dass es genau so gewünscht war.
MfG ChrisB
--
“Whoever best describes the problem is the person most likely to solve the problem.” [Dan Roam]
Oh sorry, ich habe deine Antwort über der von Struppi nicht bemerkt, darum reagiere ich erst so spät.
Vielen Dank für deine Mühe - dein Javascript bringt mich definitiv weiter, gerade die Idee mit der Klasse jsEnabled ist ein wirklich toller ansatz! Natürlich ist die Funktionalität noch nicht die gleiche wie bei mir, dennoch aber viel schöner (zb ist ein einfaches if(parentNode gleich mainmenu) nicht ausreichend, Patrick hat dies schon richtig gesehen). Ich werde jetzt einmal deine Idee auf mein Skript zu applizieren versuchen, nur schon dem Auge wegen :) und hoffe das Problem ist dann weg.
Ich bin allerdings immer noch etwas verwundert über die Schwierigkeiten mit meinem Skript (abgesehen von den ie6/7 Unpässlichkeiten) - wo nichts ist (kein Leerschlag und nada) kann doch kein Browser noch zusätzliche Knoten finden?
Der Grund wieso ich überhaupt damit begonnen habe, den Baum rauf- und runterzuhangeln ist derselbe wie für den html-code, der dir so nicht gefallen hat (siehe unten). Ich schaue jetzt aber wirklich mal mit deinen Ansätzen, ob ichs etwas geschickter umsetzen kann.
Das solltest du mal sauber aufbauen.
Erst mal statisch (ohne JS), ein simples Menü, mit CSS wie gewünscht formatiert, ohne zusätzliche Elemente, die den Code aufblähen. Und darauf dann anschliessend mit JavaScript aufsetzen.Ich sehe bspw. keinen offensichtlichen Grund, warum du nicht mit LIs und darin liegenden A-Elementen auskommst; was sollen die ganzen SPAN- und auch noch FONT-Elemente da?
Die nicht vollkommen optimale Form des html-codes hat eine ganz einfache Begründung: Joomla. So generiert das entsprechende Joomla-Modul das Menü aus der Datenbank (mit den li- und span-Elementen). Die zusätzlichen font-Elemente drin kommen daher, dass ich auf einige wenige Zusatzinformationen in der Liste drin nicht verzichten möchte und diese dafür formatieren muss (kleinere Schrift etc).
Und da diese nur jeweils einen Teil des jeweiligen Listen-Textes ausmachen, sehe ich keine andere Möglichkeit als in der obigen Form die font-Tags direkt reinzuschreiben... Ist das verständlich? :)
(ich habe das zusätzliche css-File, wo auch diese Schriftgrössen angegeben sind nicht auch hochgeladen, da die sonstigen Angaben das Menü nicht betreffen - auch nicht über Vererbung - und daher belanglos sind)
danke Dir!
wo nichts ist (kein Leerschlag und nada) kann doch kein Browser noch zusätzliche Knoten finden?
Und noch dazu: Das display: appliziert der IE ja richtig. Nur mit dem margin hat er Probleme - obwohl beide nacheinander ausgeführt werden und das gleiche Element betreffen?! Das macht aus meiner Sicht keinen Sinn...
Hi,
Die zusätzlichen font-Elemente drin kommen daher, dass ich auf einige wenige Zusatzinformationen in der Liste drin nicht verzichten möchte und diese dafür formatieren muss (kleinere Schrift etc).
Und da diese nur jeweils einen Teil des jeweiligen Listen-Textes ausmachen, sehe ich keine andere Möglichkeit als in der obigen Form die font-Tags direkt reinzuschreiben...
Dann nutze irgendein Element, das den jeweiligen Inhalt *sinnvoll* auszeichnet, und formatiere dieses per CSS wie gewünscht.
MfG ChrisB
Hey
»»*sinnvoll*
Daraus habe ich geschlossen, dass da wohl was geschehen sein muss, seit ich mich das letzte Mal damit beschäftigt habe und - *html update* - hoppla, siehe da - das <font> wird gleich weg sein :) (macht ja eigentlich auch Sinn)
freundlicher gruss
Bitte gehe auf mein Problem ein - Wenn du mein erstes Posting gelesen hättest, wüsstest du dass alles perfekt funktioniert in firefox, in IE aber der margin erst verspätet verstellt wird (display funktioniert auch problemlos) - darum ja auch "IE BUG", weils meines Erachtens nichts anderes sein kann.
Na dann. Worauf soll ich dann eingehen, wenn du es sowieso schon weißt?
ps. da gibts für die browser nichts verschieden zu zählen, da hat es keinen text oder sonst was dazwischen wo man irgendwo leerschläge/umbrüche o.ä. auch als neue elemente zählen könnte.
Woher sollen wir das Wissen? Wie Chris schon andeutet, wir können kein Problem lösen, wenn wir das Problem nicht sehen. Ich habe bisher nur Vermutungen angestellt, mehr ist nicht drin solnage wir deinen Fehler nicht nachvollziehen können.
Unabhängig davon. Was hält dich denn jetzt definitiv davon ab das Skript einfach sauber zu programmieren und mal eine Prüfung einzubauen ob du tatsächlich das richtige Element hast?
Struppi.
Na dann. Worauf soll ich dann eingehen, wenn du es sowieso schon weißt?
Na, was ich gegen den bug unternehmn kann :)
solnage wir deinen Fehler nicht nachvollziehen können.
ich hoffe ich hab' einen gemacht.
ist aber auch eine etwas spezielle hilfe wenn man auf die frage mit dem hintergrundgedanken eingeht "er hat nen fehler gemacht".
Unabhängig davon. Was hält dich denn jetzt definitiv davon ab das Skript einfach sauber zu programmieren und mal eine Prüfung einzubauen ob du tatsächlich das richtige Element hast?
ich sehe den grund nicht ein - dass das display:none/display:block auf das richtige element angewandt wird heisst für mich mehr als übereindeutig dass ich das richtige habe. dazu wird in firefox das "onclick" auch in den sichtbaren quelltext geschrieben, wodurch ich mir das ganze anschaun kann und meine bestätigung bekomme :)
sorry wenn ich etwas genervt geklungen habe, ich habe nur den eindruck dass du mich mehrfach nach dingen gefragt hast, die in den posts schon beantwortet warn. vielleicht habe ich mich aber auch undeutlich ausgedrückt.
Unabhängig davon. Was hält dich denn jetzt definitiv davon ab das Skript einfach sauber zu programmieren und mal eine Prüfung einzubauen ob du tatsächlich das richtige Element hast?
ich sehe den grund nicht ein
Mal abgesehen vom Fehlerhaften Verhalten im IE. Kannst du auschliessen, dass du die HTML Struktur nie ändern wirst?
Dieses ungeprüfte über childNode und nextSibling laufen ist hochgradig Riskant. Ein Zeilenumbruch, ein neues Element oder ein sonstiges ändern der Struktur wird zu einem Fehler führen. Das ist einfach unsaubere Programmierung, aber es kann auch dir helfen einen Fehler zu finden.
Struppi.
Mal abgesehen vom Fehlerhaften Verhalten im IE. Kannst du auschliessen, dass du die HTML Struktur nie ändern wirst?
Die Struktur wird in dieser Form durch Joomla ausgegeben und wird aus diesem Grund immer gleich bleiben, ausser ich käme einmal auf die Idee, ein anderes Menü-Modul zu benützen, weil mir der Code zu unschön ist :)
fg
Hallo stewe,
versuch mal, beim Öffnen den Displaywert auf "" zu setzen. Das ist der Browser- und Elementabhängige Defaultwert.
Gruß, Jürgen
Hallo stewe,
versuch mal, beim Öffnen den Displaywert auf "" zu setzen. Das ist der Browser- und Elementabhängige Defaultwert.
hmm... warum sollte dies mit dem problem zu tun haben? öffnen und schliessen (also das setzen des display-werts) funktioniert einwandfrei
[latex]Mae govannen![/latex]
das ist ein teil der javascript-funktion:
function close( _This ){
}; function open( _This ){ };
Nur eine Anmerkung zur Namengebung: Funktionen mit den Namen "open" oder "close" solltest du nicht im allgemeinen scope benutzen, weil sie ans globale Objekt (üblicherweise window) gehängt werden und dann mit window.open und window.close kollidieren
Cü,
Kai
--
Even if you are a master of jQuery, you can only create mediocre (at best)
scripts. The problem is that the authors you rely on have not mastered the
DOM themselves. It's like one blind guy leading another off a cliff (D.Mark/clj)
[Foren-Stylesheet](http://selfhtml.knrs.de/#h_stylesheet) [Site](http://knrs.de/) [Selfzeug](http://selfhtml.knrs.de/) [JS-Lookup](http://js.knrs.de/lookup/)
SelfCode: sh:( fo:| ch:? rl:( br:< n4:( ie:{ mo:| va:) js:| de:> zu:) fl:( ss:| ls:?
Nur eine Anmerkung zur Namengebung: Funktionen mit den Namen "open" oder "close" solltest du nicht im allgemeinen scope benutzen, weil sie ans globale Objekt (üblicherweise window) gehängt werden und dann mit window.open und window.close kollidieren
Nicht kolliedieren, sie überschreiben einfach diese Funktionen - stimmt hatte ich nciht gesehen
Struppi.
[latex]Mae govannen![/latex]
Nur eine Anmerkung zur Namengebung: Funktionen mit den Namen "open" oder "close" solltest du nicht im allgemeinen scope benutzen, weil sie ans globale Objekt (üblicherweise window) gehängt werden und dann mit window.open und window.close kollidieren
Nicht kolliedieren, sie überschreiben einfach diese Funktionen - stimmt hatte ich nciht gesehen
Ja, ich hatte überlegt, das so zu schreiben, war mir aber unsicher, ob die Methoden wirklich immer überschrieben werden oder ob es auch Browser gibt, die die "Änderung" einfach ablehnen oder mit einem Fehler aussteigen. Kollidieren erschien mir hier unverbindlicher *g*
Cü,
Kai
bezüglich scope: ich habe mich da in javascript nur etwas reingelesen.
die funktionen sind alle einem objekt "Navigation" zugewiesen - besteht dieses problem auch dann noch?
die funktionen sind alle einem objekt "Navigation" zugewiesen - besteht dieses problem auch dann noch?
Ja. Zumindest, wenn du die Funktion im gloabeln Scope definierst. Wenn du ein Objekt hast, ist der beste Weg die Funktion direkt dem Objekt zu zuweisen.
Struppi.
die funktionen sind alle einem objekt "Navigation" zugewiesen - besteht dieses problem auch dann noch?
Ja. Zumindest, wenn du die Funktion im gloabeln Scope definierst. Wenn du ein Objekt hast, ist der beste Weg die Funktion direkt dem Objekt zu zuweisen.
Struppi.
Wie im zitierten Text geschrieben - Sie sind dem Objekt zugewiesen ;) Sie sind nicht einmal global ansprechbar (privates des Objekts) - weit davon entfernt, dem window zugewiesen zu sein.
So wie ich das sehe kein Problem.
das ist ein teil der javascript-funktion:
function close( _This ){
_This.parentNode.nextSibling.style.marginTop="10px"; _This.parentNode.childNodes[1].style.display="none"; }; function open( _This ){ _This.parentNode.nextSibling.style.marginTop="0px"; _This.parentNode.childNodes[1].style.display="block"; };
Ich hab mir mal die Mühe gemacht aus deinem Konstrukt was sinnvolles zu basteln (eigentlich dein Job) und muss dir sagen, der Code funktioniert einwandfrei im IE. Wenn man die Werte sinnvollen Elementen zuordnet.
Struppi.
obwohl der display: und der margin: - befehl in der gleichen funktion untereinander liegen, führt er jeweils nur den display-befehl sofort aus und verzögert den margin:-befehl auf den moment, in dem man das nächste mal über das element fährt (das heisst, er wird dann doch ausgeführt).
Wer kann diese Beobachtung in IE8 bestätigen?
http://www.n.ethz.ch/~islers/beispiel/index.html