Id als parameter einer "setInterval-funktion"/var=parsInt(id)?
Zim
- javascript
0 Cheatah0 Zim0 Felix Riesterer0 Zim
0 Cheatah
1 Felix Riesterer
Hallo zusammen,
Ich habe meine Schwierigkeiten mit der Übergabe der id an eine Funktion, die in setInterval(---) aufgerufen wird..
beim zweiten alert wird mir die url der id ausgegeben aber nicht der eigentliche Wert..
mein Code:
var steuerung="";
var counter=0;
function wechsel (wert)
{
alert(wert); //gibt den pfad der id aus nicht den wert
if(wert=="id1")//vergleich dadurch nicht machbar
{
counter=counter+1;
if(counter==2)
{
clearInterval(steuerung);
}
}
else
{
alert("mopsidoll");
counter=counter+1;
if(counter==2)
{
clearInterval(steuerung);
}
}
}
function test1 (wert)
{
if(wert=="id1")
{
alert(wert); //gibt id1 aus
document.getElementById(wert).style.display="none";
steuerung=setInterval("wechsel("+wert+")", 100);
}
else
{
alert("fail");
}
}
<a id="id1" href="#" style="background-image:url('tr.png');" onclick="test1(id)">iwashalt</a>
kann man evtl die id einfach als zahl speichern? parsen geht ja leider nicht
Hi,
steuerung=setInterval("wechsel("+wert+")", 100);
der String, den Du hier anstatt einer Funktion übergibst, lautet im Endergebnis
wechsel(id1)
und wäre auch außerhalb des Intervalls ungültig, da Du nirgendwo eine globale(!) Variable dieses Namens erzeugt hast. Lösung: Trenne Dich von der Unart, Strings dort zu verwenden, wo Funktionen benötigt werden.
Dein Stichwort lautet "closure".
Cheatah
Ok funktioniert soweit danke für die schnelle Hilfe,
ich hab bin durchs programmieren nur gewohnt globale variablen zu meiden und vergesse manchmal das js keine programmiersprache ist
Lieber Zim,
und vergesse manchmal das js keine programmiersprache ist
wer behauptet diesen Unsinn?
Liebe Grüße,
Felix Riesterer.
An Felix Riesterer,
nun ist der wesentliche Unterschied z.B. ziwschen Java und JavaScript, dass Java/C/C++ alle als Binärdatei ausgeführt werden wogegen JavaScript eben direkt als "Text" interpretiert wird vom Computer.
Deswegen gehört Js für mich zu den Skriptsprachen und nicht zu den Programmiersprachen.
Tach,
nun ist der wesentliche Unterschied z.B. ziwschen Java und JavaScript, dass Java/C/C++ alle als Binärdatei ausgeführt werden wogegen JavaScript eben direkt als "Text" interpretiert wird vom Computer.
willkommen im 21. Jahrhundert: Die in modernen Browsern verbauten Javascript-Engines kompilieren den Quelltext üblicherweise auch, ähnlich wie bei der Umwandlung von Java-Quelltext in Bytecode. V8 erzeugt sogar direkt Maschinencode ohne Zwischenstufe: https://code.google.com/intl/de/apis/v8/design.html#mach_code
Deswegen gehört Js für mich zu den Skriptsprachen und nicht zu den Programmiersprachen.
Scriptsprachen sind eine Teilmenge der Programmiersprachen.
mfg
Woodfighter
Hi,
ich hab bin durchs programmieren nur gewohnt globale variablen zu meiden
das solltest Du auch weiterhin tun; für die genannten Closures sind auch keine nötig.
und vergesse manchmal das js keine programmiersprache ist
Wie schon erwähnt wurde ist jede Scriptsprache zwangsläufig eine Programmiersprache, genau wie jeder PKW ein Auto ist.
Cheatah
Lieber Zim,
was willst Du denn _tatsächlich_ erreichen. Ich habe mir nicht die Mühe gemacht, die Funktionsweise Deiner Funktionen zu überprüfen (wozu auch?). Deine Frage war eine sehr spezielle, nämlich wie Du die ID eines Elements an eine Funktion übergeben kannst (wozu auch immer das gut sein soll).
<a id="id1" href="#" style="background-image:url('tr.png');" onclick="test1(id)">iwashalt</a>
Wenn schon, dann so:
<a id="id1" href="#" style="background-image:url('tr.png');" onclick="test1(this.id)">iwashalt</a>
Vermutlich willst Du die ID, um später auf das Element selbst später wieder zurückgreifen zu können (hier das <a>-Element):
<a id="id1" href="#" style="background-image:url('tr.png');" onclick="test1(this)">iwashalt</a>
In der Funktion test1 kannst Du nun so vorgehen:
function test1 (el)
{
if(el) // wurde ein Element übergeben?
{
alert(el.id); //gibt z.B. "id1" aus
el.style.display="none";
steuerung=setInterval(function () {
wechsel(el.id); // wechsel erwartet den ID-String
}, 100);
}
else
{
alert("fail");
}
}
Wie Cheatah schon sagte, möchtest Du setInterval keinen String übergeben (Du nimmst "wechsel(id1)" als String, indem "id1" als globale Variable verstanden wird), sondern ein Funktionsobjekt (siehe oben). Dass die Variable "el" innerhalb dieses Funktionsobjektes bekannt ist, liegt daran, dass es eine Closure ist (was Cheatah auch einfordert).
Liebe Grüße,
Felix Riesterer.