Chrostoph: Wenn man zu viel Zeit hat...

Beitrag lesen

Moin.

Wie auch immer. noch eleganter wäre es, wenn man JS vom Markup trennt und die events dynamisch bindet. [...] Naja, vermutlich overkill für diese Aufgabe, aber elegant ;-)

Z.B. so ;)

  
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"  
     "http://www.w3.org/TR/html4/loose.dtd">  
<title>Test</title>  
<script type="text/javascript">
  
onload = function() {  
 var deps = {  
  sport : ['ballsport'],  
  ballsport : ['fussball', 'handball'],  
  fussball : [],  
  handball : []  
 };  
 var form = document.forms[0];  
 for(var name in deps) {  
  form[name].requires = [];  
  form[name].inferences = deps[name];  
  form[name].onclick = function() {  
   var arr = this.checked ? this.requires : this.inferences;  
   for(var i = 0; i < arr.length; ++i) {  
    var el = form[arr[i]];  
    if(el.checked !== this.checked) {  
     el.checked = this.checked;  
     el.onclick();  
    }  
   }  
  };  
 }  
 for(var name in deps) {  
  for(var i = 0; i < deps[name].length; ++i)  
   form[deps[name][i]].requires.push(name);  
 }  
};
~~~~~~html
  
</script>  
<body>  
<form action="">  
<input type="checkbox" name="sport"> Sport<br>  
<input type="checkbox" name="ballsport"> Ballsport<br>  
<input type="checkbox" name="fussball"> Fussball<br>  
<input type="checkbox" name="handball"> Handball  
</form>

Christoph