Zim: Id als parameter einer "setInterval-funktion"/var=parsInt(id)?

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

  1. 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

    --
    X-Self-Code: sh:( fo:} ch:~ rl:| br:> n4:& ie:% mo:) va:) de:] zu:) fl:{ ss:) ls:~ js:|
    X-Self-Code-Url: http://emmanuel.dammerer.at/selfcode.html
    X-Will-Answer-Email: No
    X-Please-Search-Archive-First: Absolutely Yes
    1. 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

      1. Lieber Zim,

        und vergesse manchmal das js keine programmiersprache ist

        wer behauptet diesen Unsinn?

        Liebe Grüße,

        Felix Riesterer.

        --
        ie:% br:> fl:| va:) ls:[ fo:) rl:| n4:? de:> ss:| ch:? js:) mo:} zu:)
        1. 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.

          1. 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

      2. 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

        --
        X-Self-Code: sh:( fo:} ch:~ rl:| br:> n4:& ie:% mo:) va:) de:] zu:) fl:{ ss:) ls:~ js:|
        X-Self-Code-Url: http://emmanuel.dammerer.at/selfcode.html
        X-Will-Answer-Email: No
        X-Please-Search-Archive-First: Absolutely Yes
  2. 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.

    --
    ie:% br:> fl:| va:) ls:[ fo:) rl:| n4:? de:> ss:| ch:? js:) mo:} zu:)