Hallo,
ich hab oncklick bisher nur im html teil benutzt. was ist anders, wenn ich es in JS benutzen will?
Sehr viel. Siehe JavaScript: Grundlagen zur Ereignisverarbeitung und die Folgeseiten zum Event-Handling.
function start() {
node = document.getElementById("table");
Wenn keine globalen Variablen nötig sind, sollte man lokale Funktionsvariablen verwenden – hier fehlt dafür das »var«. Dasselbe bei mycurrent_row und mycurrent_cell.
mycurrent_cell.setAttribute("ID", menu[j]);
insertimg = document.createElement('img');
insertimg.setAttribute('src', "images/space.png");
setAttribute brauchst du eigentlich nie. Du kannst in der Regel einfach
insertimg.src = "images/space.png";
schreiben. Das geht auch für viele andere Attribute wie etwa id.
insertimg.onclick=navi(j);/* um diesen befehl geht es. ist es besser onclick als setAttribute zu benutzen? is doch eigendlich unsinnig da es schließlich ein JS befehl ist, oder? */
Es wäre möglich, folgendes zu notieren:
insertimg.setAttribute('onclick', 'navi(' + j + ')');
Das ist aber nicht so kompatibel wie die klassische Variante, bei der man der onclick-Eigenschaft ein Funktionsobjekt zuweist.
Andere Möglichkeiten wären:
-
Mit jedem Schleifendurchlauf eine Closure erzeugen. (Siehe die bisherigen Antworten.)
-
Informationen am Element speichern, welches den Event-Handler trägt, und in der Handlerfunktion diese auslesen (siehe Event-Objekt, verarbeitendes Element). Du speicherst ja schon die ID beim td-Element, damit könntest du bereits arbeiten.
insertimg.setAttribute('data-row', j);
insertimg.onclick = navi;
function navi (e) {
var row = this.getAttribute('data-row');
alert(row);
}
- Per Event-Delegation nur einen Event-Handler pro Zeile registrieren, denn alle Bilder einer Zeile scheinen denselben Event-Handler zu haben. Darin die nötigen Informationen beschaffen, wenn nötig über das Zielelement.
mycurrent_row.setAttribute('data-row', j);
mycurrent_row.onclick = navi;
navi wie oben
Du hast anscheinend ohnehin schon eine separate Datenstruktur »menu«, welche du verwenden könntest. Wahrscheinlich musst du gar keine Zusatzinformationen im DOM speichern.
Mathias