molily: Variablenübergabe

Beitrag lesen

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