for-function-bindings
seb
- javascript
Hi,
folgendes Problem, ich habe eine for-schleife, in der wiederum
werden unterschiedliche Events durchlaufen, nun möchte ich
zusätzlich dass das "i" von der for-schleife zugleich mit
dem gerade jeweiligen Event mitgeliefert wird, dass es
innerhalb des Events bekannt ist.
z.B. i=0 durch die for-schleife, 0 soll nun auch innerhalb
my_span_tags[i].onmouseover = function(e) bekannt sein.
Wie kann ich das realisieren?
Ein Codebeispiel:
var my_span_tags = document.getElementById('test_null').getElementsByTagName('span');
for(i=0; i<my_images.length; i++)
{
my_span_tags[i].onmouseover = function(e)
{
alert(i);
}
}
Merci schon mal, Seb
Hi,
my_span_tags[i].i=i;
my_span_tags[i].onmouseover = function(e)
{
alert(this.i);
}
Gruß, Cybaer
Wie kann ich das realisieren?
Mir fallen zwei Möglichkeiten ein.
Entweder du gibst dem Objekt die Variabel als Eigenschaft mit: my_span_tags[i]['i'] = i
oder du erzeugst die Funktion mit new Function (o.ä.)
Struppi.
Wie kann ich das realisieren?
Mir fallen zwei Möglichkeiten ein.
Entweder du gibst dem Objekt die Variabel als Eigenschaft mit:
my_span_tags[i]['i'] = i
oder du erzeugst die Funktion mit new Function (o.ä.)Struppi.
Danke euch beiden, die erste Möglichkeit krieg ich hin,
allerdings das mit new Function nicht, wie müsste ich
das anstellen?
Habs folgendermassen probiert:
myFunc = new Function(i);
test1[i].onmouseover=myFunc()
{
alert(this.i);
}
hierbei wird jedoch die Ausgabe sofort gemacht,
ohne dass ein Mouseover geschieht, is also etwas
falsch bei mir.
Gruß, Seb
Danke euch beiden, die erste Möglichkeit krieg ich hin,
allerdings das mit new Function nicht, wie müsste ich
das anstellen?
Schau dir nochmal das Kapitel in selfhtml an, wie man eine Funktion mit new Function erstellt.
myFunc = new Function(i);
hier hast du eine Referenz auf deine Funktion.
test1[i].onmouseover=myFunc()
und hier rufst du sie auf, wenn müßtest du myFunc ohne Klammer schreiben. allerdings bin ich mir nicht sicher ob dein Konstrukt so funktioniert.
{
alert(this.i);
}
dieser Block wird dann wahrscheinlich einfach ausgeführt.
Struppi.
sry, habe auch schon var myFunc = new Function(i) probiert,
ebenso auch test1[i].onmouseover=myFunc und er ruft
trotzdem alles gleich auf, wie meintest du die
Lösung bezüglich new Function? Wenn alles gleich aufgerufen
wird?
mfg darki
Danke euch beiden, die erste Möglichkeit krieg ich hin,
allerdings das mit new Function nicht, wie müsste ich
das anstellen?Schau dir nochmal das Kapitel in selfhtml an, wie man eine Funktion mit new Function erstellt.
myFunc = new Function(i);
hier hast du eine Referenz auf deine Funktion.
test1[i].onmouseover=myFunc()
und hier rufst du sie auf, wenn müßtest du myFunc ohne Klammer schreiben. allerdings bin ich mir nicht sicher ob dein Konstrukt so funktioniert.
{
alert(this.i);
}dieser Block wird dann wahrscheinlich einfach ausgeführt.
Struppi.
Bitte keine TOFU.
sry, habe auch schon var myFunc = new Function(i) probiert,
und das Kapitel in http://[link:http://de.selfhtml.org/javascript/objekte/function.htm@title=selfhtml] gelesen?
ebenso auch test1[i].onmouseover=myFunc und er ruft
trotzdem alles gleich auf, ....
Das glaube ich nicht.
Struppi.
Kannst du gerne Testen, aber er ruft es wirklich sofort :(
auf, (und ja ich hab es mir durchgelesen)
hier der nahezug komplette code:
<div id="test_null">
<span>123</span>
<span>456</span>
<span>789</span>
</div>
<script type="text/javascript">
var test1 = document.getElementsByTagName('span');
for(i=0;i<test1.length;i++)
{
var myFunc = new Function(i);
test1[i].onmouseover=myFunc
{
alert(i);
}
}
</script>
Kannst du gerne Testen, aber er ruft es wirklich sofort :(
weil du immer noch den unnötigen Block mit dem alert drin hast, der wird aufgerufen, aber nicht die Funktion.
auf, (und ja ich hab es mir durchgelesen)
Dann verstehe ich nciht, wie du darauf kommst:
var myFunc = new Function(i);
test1[i].onmouseover=myFunc
Hier weist du dem Event das Objekt zu, dem der Funktionskörper fehlt.
{
alert(i);
}
und hier rufst du alert(i) auf.
Struppi.