and_z: getElements, undefined?

Hallo an alle.
Leider habe ich nichts gefunden, was mich weitergebracht hat, deswegen poste ich mein Problem Mal hier.

Ich habe eine HTML-Tabelle und möchte auf die Zellen zugreifen. Aber irgendwie stecke ich fest, bekomme anstatt einer "collection"
immer "undefined" zurück. Es ist wahrscheinlich logisch falsch, aber ich habe gedacht so etwas sollte funktionieren:

  
function test(){  
   var cells = document.getElementsByTagName("table")[0].getElementsByTagName("td");  
}  

Jetzt kommt etwas, was mich total verwirrt:
Wenn ich die Funktion "test()" von einem "anchor" aus aufrufe (z.B. <a href="javascript:test()">klick mich</a>), dann funktioniert
es plötzlich. Ich bekomme in "cells" alle Tabellenzellen zurück.

Ich wollte aber so etwas machen:

  
document.onload = init();  
function init(){  
   test();  
}  

Und in diesem Fall liefert document.getElementsByTagName("table") ein "undefined" zurück. Habe auch mit Element-Id probiert,
es kommt das selbe heraus.

Wäre über Tips sehr dankbar!
-Andreas-

P.S.: sorry für die Formatierung, es ist mein erster Thread =)

  1. Hi,

    document.onload = init();

    erstens heißt es window.onload, und zweitens führst Du hier dank der runden Klammern init() *umgehend* aus und schreibst die *Rückgabe* (also undefined) in den onload-Handler. Die Funktion init() führt test() aus, test() sucht nach Elementen, diese Elemente gibt es in diesem Moment noch nicht.

    Wäre über Tips sehr dankbar!

    Speichere eine Referenz auf die Funktion, anstatt der Rückgabe der Ausführung.

    Cheatah

    --
    X-Self-Code: sh:( fo:} ch:~ rl:° br:> n4:& ie:% mo:) va:) de:] zu:) fl:{ ss:) ls:~ js:|
    X-Self-Code-Url: http://emmanuel.dammerer.at/selfcode.html
    X-Will-Answer-Email: No
    X-Please-Search-Archive-First: Absolutely Yes
    1. Hallo,

      erstens heißt es window.onload

      Das kann man so pauschal nicht sagen. Laut DOM ist document.onload richtig (window gehört derzeit ja noch nicht zum DOM). Aufgrund der geringen Unterstützung (AFAIK nur Opera), sollte man aber vorerst lieber noch window.onload verwenden.

      mfg. Daniel

      1. Hallo,

        Das kann man so pauschal nicht sagen. Laut DOM ist document.onload richtig (window gehört derzeit ja noch nicht zum DOM).

        Naja, laut DOM gibt es weder »document.onload« noch »window.onload«. ;) Aber ja, laut DOM 2 Events passiert der load-Event beim body-Element, nur regelt DOM Events nicht, dass man die Events über on...-Eigenschaften handlen kann. window.onload ist halt nicht DOM-irgendwas - weil das DOM halt nur Dokumente kennt, nichts darüber wie etwa Fenster -, sondern das wurde mal in Netscape JavaScript spezifiziert.

        Aufgrund der geringen Unterstützung (AFAIK nur Opera), sollte man aber vorerst lieber noch window.onload verwenden.

        Ja, die Alternative wäre dann, wenn man wirklich DOM-gemäß arbeiten will:
        document.addEventListener("load", func, false);

        Mathias

        1. Hallo,

          Ja, die Alternative wäre dann, wenn man wirklich DOM-gemäß arbeiten will:
          document.addEventListener("load", func, false);

          Du meinst, die Direktzuweisung ist laut DOM gar nicht erlaubt? Ich finde addEventListener irgendwie umständlich. Der Einzige Vorteil ist, dass man im 3. Parameter noch den Bubbling-Mode beeinflussen kann. Aber theoretisch müsste man doch auch diesen Parameter in irgend einer Eigenschaft wieder finden oder?

          Ich hatte mir die addEventListener-Methode immer so vorgestellt:

            
          [Knoten].prototype.addEventListener = function(event,Funktion,noBubbling){  
          //ggf. noch irgendwas wegen dem Bubbling-Mode  
          return this["on"+event] = Funktion;  
          }
          

          Methoden sind ja schließlich nur zur Ausführung und Speicherung gedacht. Oder habe da was falsch verstanden?

          mfg. Daniel

  2. Ich vergaß zu erwähnen:

    P.S.: sorry für die Formatierung, es ist mein erster Thread =)

    Inhalt, Beschreibung und Formatierung waren besser als bei den meisten anderen, insofern mach Dir da mal keine Sorgen.

    Cheatah

    --
    X-Self-Code: sh:( fo:} ch:~ rl:° br:> n4:& ie:% mo:) va:) de:] zu:) fl:{ ss:) ls:~ js:|
    X-Self-Code-Url: http://emmanuel.dammerer.at/selfcode.html
    X-Will-Answer-Email: No
    X-Please-Search-Archive-First: Absolutely Yes
    1. Inhalt, Beschreibung und Formatierung waren besser als bei den meisten anderen,...

      2 Doofe ein Gedanke

      Struppi.

      --
      Javascript ist toll (Perl auch!)
  3. Ich wollte aber so etwas machen:

    document.onload = init();
    function init(){
       test();
    }

      
    Das geht so nicht, du musst hier dem Event eine Funktionsreferenz zuweisen, so rufst du die Funktion auf und weist dem Handler den Rückgbaewert der Funktion zu.  
      
    Du willst: document.onload = init;  
      
    
    > P.S.: sorry für die Formatierung, es ist mein erster Thread =)  
      
    War besser als bei den meisten "alten Hasen"  
      
      
    Struppi.
    
    -- 
    [Javascript ist toll](http://javascript.jstruebig.de/) (Perl auch!)
    
  4. Hallo,

    Ich wollte aber so etwas machen:

    document.onload = init();
    function init(){
       test();
    }

      
    Hier steckt dein Fehler. So wie es oben steht, wird der Code sofort ausgeführt. Du möchtest aber eine Funktionsreferenz. Außerdem würde ich das, im Prinzip zwar richtige, aber nicht so breit unterstützte `document.onload`{:.language-javascript} durch `window.onload`{:.language-javascript} ersetzen.  
      
    Dein Code müsste so aussehen:  
    ~~~javascript
      
    window.onload = init;  
    function init(){  
       test();  
    }
    

    mfg. Daniel

  5. Viiiielen Dank an euch ALLE!
    Es hat super geklappt.
    Ich lobe diesen Forum und die Experten =)

    -Andreas-