Timo Hilbertz: this.eval("parentNode"): nix für IE?

Hallo,

ich habe einen Baum mit Checkboxen gebaut, in dem die Checkboxen von Elternknoten gesetzt oder gelöscht werden, so bald man auf die Kinder-Checkbox klickt:

http://hilbertz.com/test/checkboxtree.html

Das funktioniert prima im FF 1.0.7, in NS 8.0.4. Im IE 6.0 und Opera 8.01 gibt es aber denselben Fehler:

name: TypeError
message: Statement on line 8: Type mismatch (usually a non-object value used where an object is required)
Backtrace:
  Line 8 of inline#1 script in http://hilbertz.com/test/checkboxtree.html
    obj = what.eval(knoten);
  Line 1 of  script
    checktree(this);

Mit what.eval("parentNode") versuche ich, mich die Nodes hinaufzuhangeln, um die Eltern-Checkboxen ein- und auszuschalten.

Ich verstehe nicht, was an dieser Operation falsch ist. Wer kann's mir erklären?

  1. Hi,

    Ich verstehe nicht, was an dieser Operation falsch ist.

    und ich verstehe nicht, wieso man eval() benutzen kann. Ganz besonders als Methode irgend welcher Objekte. Erkläre bitte erst einmal, was Du damit bezweckst.

    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. Hi,

      Ich verstehe nicht, was an dieser Operation falsch ist.

      und ich verstehe nicht, wieso man eval() benutzen kann. Ganz besonders als Methode irgend welcher Objekte. Erkläre bitte erst einmal, was Du damit bezweckst.

      Cheatah

      äh, das habe ich doch oben geschrieben:

      Mit what.eval("parentNode") versuche ich, mich die Nodes
      hinaufzuhangeln, um die Eltern-Checkboxen ein- und auszuschalten.

      wie soll ich denn sonst von der aktuellen checkbox den bezug zum elternknoten finden?

      1. Hallo Timo.

        wie soll ich denn sonst von der aktuellen checkbox den bezug zum elternknoten finden?

        [ ] Du kennst http://de.selfhtml.org/javascript/objekte/node.htm#parent_node@title=parentNode.

        Einen schönen Donnerstag noch.

        Gruß, Ashura

        1. [ ] Du kennst http://de.selfhtml.org/javascript/objekte/node.htm#parent_node@title=parentNode.

          [ ] Du liest Threads vollständig, bevor Du eine Antwort schreibst.

          1. Hallo Timo.

            [ ] Du kennst http://de.selfhtml.org/javascript/objekte/node.htm#parent_node@title=parentNode.

            [ ] Du liest Threads vollständig, bevor Du eine Antwort schreibst.

            [x] Normalerweise.

            Einen schönen Donnerstag noch.

            Gruß, Ashura

    2. Hi,

      und ich verstehe nicht, wieso man eval() benutzen kann.

      hänge eine funktion/objekt ein, von der der name erst zur laufzeit bekannt wird z.B.

      gruss

      --
      no strict;
      no warnings;
      79.78 cups of Coffee (Brewed) + Me = Death
      Reklame ist die Kunst, auf den Kopf zu zielen und die Brieftasche zu treffen.
  2. Hallo,

    ich habe einen Baum mit Checkboxen gebaut, in dem die Checkboxen von Elternknoten gesetzt oder gelöscht werden, so bald man auf die Kinder-Checkbox klickt:

    http://hilbertz.com/test/checkboxtree.html

    Wah! DIV-Soup vom Feinsten. Bitte versuche dies mit HTML in Form verschachtelter UL/LI-Listen umzusetzten.

    Das funktioniert prima im FF 1.0.7, in NS 8.0.4. Im IE 6.0 und Opera 8.01 gibt es aber denselben Fehler:

    name: TypeError
    message: Statement on line 8: Type mismatch (usually a non-object value used where an object is required)
    Backtrace:
      Line 8 of inline#1 script in http://hilbertz.com/test/checkboxtree.html
        obj = what.eval(knoten);
      Line 1 of  script
        checktree(this);

    Mit what.eval("parentNode") versuche ich, mich die Nodes hinaufzuhangeln, um die Eltern-Checkboxen ein- und auszuschalten.

    Hm, wo steht, dass ein HTMLFormElement oder ein HTMLElement eine Methode eval() hat?

    Außerdem ist eval evil.

    So funktioniert es:

      
    var levels=5 // Anzahl der Knoten  
    function  checktree(what) {  
            if (what.checked) {  
                    var obj = what.parentNode;  
                    for (k=0;k<levels;k++) {  
                            obj.getElementsByTagName("input")[0].checked=true  
                            obj = obj.parentNode;  
                            }  
                    } else {  
                    var c = what.parentNode.getElementsByTagName("input").length  
                    for (k=0;k<c;k++) {  
                            what.parentNode.getElementsByTagName("input")[k].checked=false  
                            }  
                    }  
            }  
    
    

    viele Grüße

    Axel

    1. Außerdem ist eval evil.

      So funktioniert es:

      vielen Dank, Axel.
      Deine Antwort ist einleuchtend :o)
      Trotzdem zwei Fragen:
      wieso ist eval evil? Einfach weil's unsauber ist?
      was spricht gegen div statt ul/li? die schachtelung ist identisch?

      1. hi,

        was spricht gegen div statt ul/li? die schachtelung ist identisch?

        Aber die Aussage über die Struktur der Daten, die du damit machst, ist es nicht.

        Ein Div besagt, "ich möchte lediglich Inhalte gruppieren, und ihnen überhaupt keine Struktur mitgeben".

        gruß,
        wahsaga

        --
        /voodoo.css:
        #GeorgeWBush { position:absolute; bottom:-6ft; }
      2. Hallo,

        Außerdem ist eval evil.

        Trotzdem zwei Fragen:
        wieso ist eval evil? Einfach weil's unsauber ist?

        Nein, weil es hierfür nicht gedacht ist. Mit eval() kann in interpretierten Sprachen ein vom Nutzer zur Laufzeit eingegebener mathematischer Term (Bsp.: 3*x*x+2*x-5) evaluiert werden. Das ist fast die einzige sinnvolle Anwendung von eval(). Für alles Andere gibt es schnellere, wartungsfreundlichere, sicherere ;-) und einfachere Methoden.

        http://forum.de.selfhtml.org/archiv/2004/7/t85372/

        was spricht gegen div statt ul/li? die schachtelung ist identisch?

        HTML ist aber nicht _nur_ Schachtelung. HTML soll _auch_ Sinn ergeben. Was Du erzeugen willst ist eine Auflistung von Lebensmitteln. HTML _hat_ Elemente für Listen. Man sollte diese Elemente auch verwenden. DIV und SPAN sind bedeutungslose Elemente zur Gruppierung. Man sollte diese _nur_ verwenden, wenn es keine sinnvollen anderen HTML-Elemente gibt.

        viele Grüße

        Axel