Struppi: Hilfe zum Verständnis

Beitrag lesen

Warum gehen die Boxen beim Aufruf der Seite auf, da hat doch nirgends ein Klick stattgefunden? Zwar wird die Funktion beim Laden aufgerufen, aber ich habe doch onclik definiert?

Das ist geklärt.

Wieder nächster Schritt:

for (var i=1;i<=4;i++) {
    dc.getElementById('elem_'+i).style.visibility="visible";
    dc.getElementById('elem_'+i).onclick = function() { alert('elem_'+i); };
  }


>   
> Die vier Elemente werden sichtbar gemacht. Nur, egal welchen ich anklicke, erhalte ich im Alert elem\_5, also elem\_ und der höchstmögliche Wert von i nach Durchlauf der Schleife (4+1). Ich hätte hier eher erwartet, dass beim Klick auf einem Element die entsprechende ID im Alert ausgegeben wird.  
  
Nein, du erzeugst hier keine neue Funktion, sondern es ist eine Funktion die den Wert des letzten Aufrufs hat.  
  

> Wie kann ich erreichen, dass beim Klick auf einem der vier Elemente eine Funktion (die ich hier für's Beispiel durch die alert() ersetzt habe) aufrufen, die auf den entsprechenden Wert von i angewiesen ist?  
  
Bist du sicher dass du dort das i brauchst?  
Innerhald der Funktion kannst du ja bereits auf this zugreifen und benötigst die ID nicht um das Element zu ermitteln.  
  
Wenn du meinst es geht nicht anders, dann kannst du mit new Funktion eine neue Funktion erzeugen.  
  
~~~javascript
  
  for (var i=1;i<=4;i++) {  
     dc.getElementById('elem_'+i).style.visibility="visible";  
     dc.getElementById('elem_'+i).onclick = new Function("alert('elem_'" + i + ')');  
}  
}  

Struppi.

--
Javascript ist toll (Perl auch!)