molily: appendChild() aus array --> fehler

Beitrag lesen

for(i=0; i < surce.length -1; i++){

Hier solltest du eine lokale Variable verwenden.

link.setAttribute("onclick", "display(surce[i][0])");

Zum einen wird das mit setAttribute nicht browserübergreifend funktionieren, stattdessen solltest du das traditionelle Registrieren von Event-Handler verwenden.

Zum anderen wird dieser Aufruf nicht das gewünschte Resultat haben, weil sich Wert der die Variable »i« zum Zeitpunkt des Ausführens von display(surce[i][0]) geändert hat seit der onclick-Zuweisung - denn die Zählschleife, die die a-Elemente erzeugt und ihnen ein onclick verpasst, ist längst durchgelaufen.

Du musst also das jeweilige a-Element mit dem zugehörigen Array verknüpfen. Das geht etwa, indem du den Array in einer Eigenschaft am Elementobjekt speicherst:

link.submenu = surce[i];

Das Registrieren des Event-Handlers kann dann so aussehen:

link.onclick = display;

In der Handlerfunktion greifst du über this auf das geklickte Element und dessen Eigenschaft zu (Zugriff auf das verarbeitende Element):

function display () {
   alert(this.submenu);
}

(Ein aussagekräftigerer Funktionsname wäre ratsam...)

document.getElementsByTagName('div')[0].appendChild(link);
         document.getElementsByTagName('div')[0].appendChild(document.createElement("br"));

Du brauchst das »document.getElementsByTagName('div')[0]« nicht zweimal wiederholen.
Am besten arbeitest du hier mit document.getElementById:

var menü = document.getElementById('menü');
menü.appendChild(link);
menü.appendChild(document.createElement('br'));

Besser wäre hier die Verwendung von <ol id="menü"><li><a>...</a></li>...</ol> anstatt <div id="menü"><a>...</a><br>...</div>.

function display(dat){
         alert(dat);
// ......hier sollte dann das 2. Menue definiert werden, wenn die Übergabe // funktionieren würde. aehnlich wie unter dat()
}

Ich verstehe noch nicht ganz, warum das Untermenü erst beim Klicken zusammengebaut werden soll. Im DOM erzeugen solltest du es schon am Anfang, beim Klick nur einblenden. (Allerdings solltest du das Menü sowieso auch ohne JavaScript zugänglich machen.)

<body onload="dat()">

Das onload-Attribut kannst du hier weglassen, verwende
window.onload = dat;
in deinem JavaScript.

Mathias