Christian S.: DOM - dynamische Erzeugung einer Verweisliste

Beitrag lesen

Hi,

was ich noch verstehe: woher kommt der Buchstabenindex? Also wieso nur A, D, J und nicht das ganze Alphabet?

<a href="javascript:void(0);"
         onClick="document.Filterparameter.Anfangsbuchstabe.value = 'A';this.blur();">
      </a>

Hier fällt schon mal auf, dass der Textwert (vermutlich der Buchstabe selber) zwischen den beiden Tags fehlt.

Da es sich hierbei ja um richtigen HTML-Code handelt, der auch ausführbar sein und auch

HTML Code ist nicht ausführbar. JavaScript schon.

Mein derzeitiger Ansatz sieht folgendermassen aus:

var Ebene   = window.document.getElementById ("Ebene_Anfangsbuchstabe");

for (var i = 0; i < Film.length; ++i)
   {
      Anfangsbuchstabe = Film[i]["Titel"].substring (0,1);

if (!Liste_Anfangsbuchstaben.Im_Array_enthalten (Anfangsbuchstabe))
      {
         Liste_Anfangsbuchstaben.push (Anfangsbuchstabe);

var Verweis = window.document.createElement ("a");
         Verweis.setAttribute ("href", "javascript:void(0);");
         Verweis.setAttribute ("onClick", "document.Filterparameter.Anfangsbuchstabe.value=Anfangsbuchstabe");
         Ebene.appendChild    (Verweis);
      }

.....
   }

Da fällt wieder nur auf, dass du, wie oben schon, den Text für den Link nicht angibst.

Diesen kannst du im DOM über document.createTextNode("text") erzeugen. Und als Knoten anhängen:

Verweis.appendChild(document.createTextNode("text"));

Habe in dem Zusammenhang mal gehört, dass man keine DOM Änderungen an Knoten machen soll, die noch nicht ins DOM eingefügt wurden. Oder bzw. keine Kindknoten an Knoten hängen, die noch "in der Luft hängen". Das soll zu Memory Leaks im IE führen.
Also erst Verweis ins DOM anfügen, dann den Text.

Hier meine Fragen:

  1. Habe ich mit meinem Ansatz denn überhaupt die richtige Richtung eingeschlagen?

Dazu fehlt mir der richtige Überblick, was du überhaupt erreichen willst. Ob JavaScript hier der richtige Ansatz ist, oder ob du sowas doch lieber serverseitig erzeugen solltest, kann man nicht beurteilen... also ich nicht.

Generell lässt sich sagen, dass du nicht unbedingt ein a Element brauchst um ein onclick abzufangen. Dann könntest du dir das href=javascript:void(0) usw. sparen.

Außerdem würde ich Events nicht per setAttribute anhängen. Um ein Event an ein DOM Element zu hängen, gibt es elegantere Methoden, obwohl IE leider noch nicht die Standards unterstützt. Stichwort: addEventListener / attachEvent.

onClick als Attribute sollte in XHTML kleingeschrieben werden.

Warum wird mir der Code nicht entsprechend erzeugt?

Vermutlich siehst du nichts? wegen des fehlenden Textes?

  1. Wie über DOM einen Variablenwert übergeben?
       Dies hinsichtlich der Übergabe der Variablen "Anfangsbuchstabe".

bei deiner Methode würde es wahrscheinlich schon so gehen:

Verweis.setAttribute ("onClick", "document.Filterparameter.Anfangsbuchstabe.value=" + Anfangsbuchstabe);

bei der anderen Methode sollte es etwa so gehen (ungetestet):

Verweis.addEventListener("click", function(){document.Filterparameter.Anfangsbuchstabe.value = Anfangsbuchstabe}, false);

  1. Wie Anweisung "onClick="this.bur();" ergänzen?

Verstehe das Problem nicht. Benutze kein a element, dann brauchst du das ohnehin nicht.

Ich empfehle dich mit EventHandling auseinander zusetzen, auch wenn's durch die vielen Browserunterschiede ein haariges Thema ist.

http://www.quirksmode.org/js/contents.html#events

Gruß
Christian