JeSchnell: IE: getElement-Methoden in onload-abhängiger Funktion!?

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>&nbsp;&nbsp;<span>+ neuen Tab &ouml;ffnen</span></div>  
    <div id="Tabs"><div id="t0" class="Tab">  
        <div class="Rahmen">  
           ...  
        </div>  
    </div></div>  
  </body>  

lg jeschnell

  1. 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>&nbsp;&nbsp;<span>+ neuen Tab &ouml;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

    --
    Butterkeksverteiler zu werden ist vermutlich eine der wenigen beruflichen Perspektiven, die sich noch bieten, wenn man einen an der Waffel hat.
      (wahsaga)
    1. 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.
      
      1. 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

        --
        Light travels faster than sound - that's why most people appear bright until you hear them speak.
  2. 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

    --
    simple JavaScript Spiele: Snake, MineSweeper, Sudoku oder Tetris
    1. 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

  3. 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

    --
    Warum nennt sich Andreas hier MudGuard?
    O o ostern ...
    Fachfragen per Mail sind frech, werden ignoriert. Das Forum existiert.