Axel Richter: this.eval("parentNode"): nix für IE?

Beitrag lesen

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