Funktionsreferenz mit Parameter

Hallo,
ich habe eine JavaScript-Funktion:

function downFkt (myelement) {
 ...
}

Ich erzeuge mir dynamisch div-Element und hänge sie in den Baum ein.
Diese Div Element sollen eine Aktion ausführen, wenn Sie geklickt werden und sich selbst als Parameter übergeben:

funktion erzeuge() {
 var child = document.createElement("div");
 child.onmousedown = new Function('downFkt(child)');
 child.style ...
 ...
 var con = document.getElementById('container'); 
 con.appendChild(child);
}

Der DOM-Baum ist korrekt, aber bei MouseDown wird als Parameter ‚child‘ aufgerufen, der in einem späteren Kontext nicht mehr bekannt ist, da es ja eine lokale Variable ist.
Es wird noch komplizierter, da die Funktion erzeuge() beliebig oft ausgeführt werden kann.

Hallo Henry,

function downFkt (myelement) {

}

Was soll denn ‚myelement‘ enthalten? Ein Objekt mit dem DIV? IdR übergebe ich dabei eine ID und es folgt ein

myObject = document.getElementById(myElement);

funktion erzeuge() {
var child = document.createElement(„div“);
child.onmousedown = new Function(‚downFkt(child)‘);
child.style …

var con = document.getElementById(‚container‘);
con.appendChild(child);
}

Hier solltest du auch direkt jedem neuen Div eine ID verpassen:

idCount = content.getElementsByTagName(‚div‘).length + 1;
child.Id = ‚id_‘ + idCount;
child.onmousedown = new Function(‚downFkt(‘ + child.id + ‚)‘);

mfg

Dirk.Pegasus

function downFkt (myelement) {

}

funktion erzeuge() {
var child = document.createElement(„div“);
child.onmousedown = new Function(‚downFkt(child)‘);
child.style …

var con = document.getElementById(‚container‘);
con.appendChild(child);
}

schreib einfach :

child.onmousedown = downFkt;

dann sollte child in downfkt ueber this verfuegbar sein…

Hallo Dirk,

idCount = content.getElementsByTagName(‚div‘).length + 1;
child.Id = ‚id_‘ + idCount;
child.onmousedown = new Function(‚downFkt(‘ + child.id + ‚)‘);

habe es so probiert:

1: var id = 'id\_' + idCounter++;
2: var child = document.createElement("div");
3: child.Id = id;
4: child.onmousedown = new Function('downFkt(' + id + ')');

Wenn er aber die 4. Ziele ausführen möchte sagt er schon beim erstenmal:

„Fehler: id_0 is not defined“

Funktionsreferenzen in JS sind mir sowieso noch suspekt, wie das genau bei dieser Scriptsprache gelöst ist.
Speichert der Interpreter in Zeile 4 einen String „downFkt(id_0)“ und ruft diesen 1:1 auf wenn das event gefeuert wurde - oder gibt es da einen anderen Mechanismus. Hab da noch nix gescheites früber gelesen. Evtl. hat mal jemand einen Link !?

Danke!

Hallo Henry,

das leistet: neues div erzeugen. Bei click wird die Länge des Attributes des neuen Divs ausgegeben (was immer das sein mag)

Das Erzeugen ist im Body angesiedelt, da es sonst zu fürh ausgeführt würde. Das DIV nn dient nur als Objekt, in dem das neue erzeugt wird.

function downFkt(id)
{
alert(document.getElementById(id).attributes.length);
}
Unbenannte Seite

var child = document.createElement(„div“);

var id = ‚id_‘ + document.getElementsByTagName(‚div‘).length + 1;
var attr = document.createAttribute(„id“);
attr.nodeValue = ‚id_‘ + document.getElementsByTagName(‚div‘).length + 1;
child.setAttributeNode(attr);

var myText = document.createTextNode(„Eine sehr dynamische Seite“);
child.appendChild(myText);
child.onmousedown = new Function(„downFkt('id_“ + document.getElementsByTagName(‚div‘).length + 1 + „’);“);

nn.appendChild(child);

mfg

Dirk.Pegasus