IE: getElement-Methoden in onload-abhängiger Funktion!?
JeSchnell
- javascript
Hi,
ich glaube ich werde verrückt: Ich hätte mir nie träumen lassen, dass ich an den getElement-Methoden scheitere. Na gut, ganz so schlimm ist es auch nicht, da nur der IE meckert, denn die FF-Fehlerkonsole meldet nichts.
Ich greife innerhalb einer Funktion per document.getElementById()
2x auf ein anderes <div>
zu.
Diese Funktion wird natürlich mit dem Event-Handler <body onload="...">
ausgeführt, sonst wäre die Fehlerquelle ja klar ;-).
Dann hab ich noch ein bisschen herumgespielt:
.: direkt ins Event-Attribute schreiben -> das funzt seltsamer Weise
.: mit window.onload
arbeiten -> gleicher Fehler wieder
.: Das Ändern der Funktionsnamens blieb auch erfolglos.
.: Script nach den <div>
s anbringen -> nutzt auch nix
.: setTimeout('...',1000)
zu verwenden -> unnütz.
.: ect. -> Der Rest hat auch nicht funktioniert.
Jetzt stellt sich die Frage, warum dieses seltsame Problem auftritt?
Please answer me!
Hier noch ein bisschen Source:
function scripteDOM() {
Leiste = document.getElementById('Leiste');
Tabs = document.getElementById('Tabs').childNodes;
Tabs[0].style.width = getSize()+'px';
alert(Tabs[0].style.width);
}
<body onload="scripteDOM()">
<div id="Leiste"><span>[Leerer Tab]</span> <span>+ neuen Tab öffnen</span></div>
<div id="Tabs"><div id="t0" class="Tab">
<div class="Rahmen">
...
</div>
</div></div>
</body>
lg jeschnell
Hallo,
Na gut, ganz so schlimm ist es auch nicht, da nur der IE meckert, denn die FF-Fehlerkonsole meldet nichts.
dann verrate uns ja nicht, was der IE zu meckern hat - es könnte uns ja auf die Lösung bringen. ;-)
.: direkt ins Event-Attribute schreiben -> das funzt seltsamer Weise
Häh? Was meinst du damit?
function scripteDOM() {
Leiste = document.getElementById('Leiste');
Tabs = document.getElementById('Tabs').childNodes;Tabs[0].style.width = getSize()+'px';
alert(Tabs[0].style.width);
}
Ich nehme an, die Funktion getSize() hast du anderswo definiert?
Außerdem legst du hier die Variablen Leiste und Tabs als globale Variablen an (meist unerwünscht) - ist das Absicht?
> ~~~html
<body onload="scripteDOM()">
> <div id="Leiste"><span>[Leerer Tab]</span> <span>+ neuen Tab öffnen</span></div>
> <div id="Tabs"><div id="t0" class="Tab">
> <div class="Rahmen">
> ...
> </div>
> </div></div>
> </body>
Mal ein Schuss ins Blaue: Der IE legt für die Elemente mit den IDs 'Leiste' und 'Tabs' automatisch gleichnamige Objekte im DOM als Unterobjekte von window an. Diese kollidieren jetzt natürlich mit den gleichnamigen globalen Variablen in deiner Funktion.
Ist es das?
So long,
Martin
Hi,
»» Na gut, ganz so schlimm ist es auch nicht, da nur der IE meckert, denn die FF-Fehlerkonsole meldet nichts.
dann verrate uns ja nicht, was der IE zu meckern hat - es könnte uns ja auf die Lösung bringen. ;-)
Fehlermeldung:
Zeile: 36
Zeichen: 3
Fehler: Object doesn't support this property or method
Code: 0
»» .: direkt ins Event-Attribute schreiben -> das funzt seltsamer Weise
Häh? Was meinst du damit?
Wenn man diese Definitionen direkt im Attribut schreibt, funktioniert es. Hier werde ich warscheindlich ohne Variablen gearbeitet haben.
»» ~~~javascript
function scripteDOM() {
»» Leiste = document.getElementById('Leiste');
»» Tabs = document.getElementById('Tabs').childNodes;
»» }
> Ich nehme an, die Funktion getSize() hast du anderswo definiert?
Ja, aber ich habe nur den wichtigen Code reinkopiert.
> Außerdem legst du hier die Variablen Leiste und Tabs als globale Variablen an (meist unerwünscht) - ist das Absicht?
Ja, damit ich später immer ohne `getElementBy`{:.language-javascript} darauf zugreifen kann, da ich diese Elemente sehr oft benötige. Diese kann ich aber erst nach dem Laden ansprechen.
> Mal ein Schuss ins Blaue: Der IE legt für die Elemente mit den IDs 'Leiste' und 'Tabs' automatisch gleichnamige Objekte im DOM als Unterobjekte von window an. Diese kollidieren jetzt natürlich mit den gleichnamigen globalen Variablen in deiner Funktion.
Müsste so sein, denn laut (und nicht leise ;-)) Micha (hab ich auch nachgetestet), funktioniert es, wenn man die Variablen klein bzw. anders schreibt.
Hi,
Fehler: Object doesn't support this property or method
Das ist genau das, was Martin bereits vermutet hatte.
Mal ein Schuss ins Blaue: Der IE legt für die Elemente mit den IDs 'Leiste' und 'Tabs' automatisch gleichnamige Objekte im DOM als Unterobjekte von window an. Diese kollidieren jetzt natürlich mit den gleichnamigen globalen Variablen in deiner Funktion.
Leiste und Tabs existieren im IE bereits im globalen Scope, eben ganz einfach deshalb, weil im Dokument entsprechende IDs vorhanden sind.
Und der Versuch, diese Elementreferenzen jetzt mit dem Zuweisungsoperator zu "überschreiben", quitiert der IE mit oben genannter Fehlermeldung.
MfG ChrisB
Hallo JeSchnell,
warum, kann ich Dir leider nicht sagen aber das kann vll molily oder Struppi tun. Es funktioniert, wenn Du die Variablen bspw. klein schreibst (also anders, als die ID selbst ist).
// Dummy-Methode
function getSize() {
return 50;
}
function scripteDOM() {
var leiste = document.getElementById('Leiste');
var tabs = document.getElementById('Tabs').childNodes;
tabs[0].style.width = getSize()+'px';
alert(tabs[0].style.width);
}
Mit freundlichem Gruß
Micha
warum, kann ich Dir leider nicht sagen aber das kann vll molily oder Struppi tun. Es funktioniert, wenn Du die Variablen bspw. klein schreibst (also anders, als die ID selbst ist).
function scripteDOM() {
var leiste = document.getElementById('Leiste');
var tabs = document.getElementById('Tabs').childNodes;
tabs[0].style.width = getSize()+'px';
alert(tabs[0].style.width);}
Vielen Dank für deine Antwort,
ich glaube das liegt dran, dass mit document.all.Leiste
auch ansprechen kann; genauer kann ich mir das aber ich nicht erklären.
lg
Hi,
gleicher Fehler wieder
Es wäre hilfreich, wenn Du erwähnen könntest, um welchen Fehler es sich handelt.
Daß der gleiche Fehler wieder auftritt, ist zwar eine schöne Information, aber hilft nicht, wenn Du nicht sagst, welcher Fehler beim ersten Versuch auftrat ...
cu,
Andreas