Patrick Andrieu: Hilfe zum Verständnis

Beitrag lesen

Hallo Marc und Gernot!

Ich antworte hier nur einmal, um nicht zwei Postings absetzen zu müssen.

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

  
Ok, hier kommen keine Alerts beim Aufruf, dafür passiert nichts beim Klicken auf die Elemente. Bei Gernots Vorschlag:  
  

> ~~~javascript
  

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

Hier kommt undefined raus. Aber this.id bringt mich in der Tat weiter (zumindest im Beispiel):

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

Hier wird beim Klicken die ID des jeweils angeklickten Elements 'rausgegeben.

Aber damit man mir die Erklärung bestätigt. Mein drittes Beispiel im Originalbeitrag kann nicht das von mir erst gedachte Ergebnis liefern, weil die Scheife bereits zu Ende durchgelaufen ist, bevor das Alert aufgerufen wird? Ist es so richtig?

Was ich versuchte zu erreichen ist folgendes:

Im Quelltex sind $x Elemente, alle mit visibility:hidden definiert und mit IDs wie beschrieben. Im Dokument verteilt sind entsprechende Links definiert (a-Elemente) - für den Aufruf.

Bisher sieht es so aus:
<a href="nojavascript_0.html" onclick="show('elem_0');">Zeig's mir</a>
text text text
<a href="nojavascript_1.html" onclick="show('elem_1');">Zeig's mir</a>

Jetzt wollte ich mir die onclicks in den a-Tags sparen und alles in einer Funktion packen, die ich mir so gedacht hatte (nach dem die Links eine Klasse verpasst bekommen haben):
<a href="nojavascript_0.html" class="klasse">Zeig's mir</a>
text text text
<a href="nojavascript_1.html" class="klasse">Zeig's mir</a>

for (var i=0;i<getElementsByClassName(document, "a", "klasse").length;i++) {
  getElementsByClassName(document, "a", "klasse")[i].onclick = function() { show('elem_'+i);}
}

was, wie eben im ersten Beitrag mit alert() gezeigt, nichts bringt, da i in der Funktion den letztmöglichen Wert bekommt. "getElementsByClassName" ist eine der vielen im Web beschriebenen Simulation einer nicht existierenden Methode des document-Objekts.

Jetzt könnte ich den Links zusätzlich eine ID verpassen (z.B. jeder Link hätte eine ID in der Form id="elem_0_link" usw.). Dann in der Function bei onclick diese zerpflücken (_link entfernen) und den Reststring (hier wäre das: elem_0) in eine Variable param speichern, die dann der Parameter für show ist:

onclick = function () {
zerpflücke mir this.id
param = erster Teil von this.id
show(param);
}

Erscheint mir aber ein Riesenaufwand... vielleicht gibt mir jemand ein Denkschubs für eine elegantere Lösung?

Viele Grüße aus Frankfurt/Main,
Patrick

--

_ - jenseits vom delirium - _
<hatehtehpehdoppelpunktslashslashwehwehwehpunktatomicminuseggspunktcomslash>