Don't make functions within a loop.

  • Hi at all

    bin grad dabei nen JavaScrip zu optimieren mit hilfe des JSLint und verzweifle grad an an einigen Sachen.

    Hier in Zeile 74

    und hier in zeile 90

    zeigt der mir: Don't make functions within a loop.

    Währe cool wenn mir jemand hierbei jemand helfen könnte :/

  • Ist doch ganz einfach: Mach globale Funktionen draus und gib ihnen Namen.
    Es macht auch keinen Sinn, onmouseout erst zu setzen, wenn onmouseover ausgelöst worden ist. Das macht der schon von selbst richtig. Also einfach zwei unabhängige Funktionen für onmouseout und onmouseover und in der Schleife machst du dann so etwas wie:

    Code
    sfEls[i].onmouseover = funktion1;
    sfEls[i].onmouseout = funktion2;

    Viele liebe Grüße
    The User

  • An sich ist es doch auch sehr nett, dass er dich den Code nicht ausführen lässt.
    Sonst ballerst du den Client ja mit nem Haufen anonymen Funktionen zu, die alle das selbe machen ;)


  • mit jquery is des was du haben willst auch ganz fix gemacht..
    siehe: each(), toggleClass()

    edit: each brauchts da noch nichma..
    es reicht addClass, removeClass oder eben toggleClass

    Einmal editiert, zuletzt von synaptic (9. März 2010 um 18:29)

  • ich hätt des zwar so gemacht:

    html:

    HTML
    <div id="menu">
        <ul>
            <li class="menli">blubb</li>
            <li class="menli">blubb</li>
            <li class="menli">blubb</li>
            <li class="menli">blubb</li>
        </ul>
    </div>

    css:

    jquery version1:

    Code
    $("#menu").ready(function(){
        $("li.menli").mouseover(function(){
            $(this).toggleClass("active");
        });
        $("li.menli").mouseout(function(){
            $(this).toggleClass("active");
        });
    });

    oder eben mit addClass und removeClass
    jquery version2:

    Code
    $("#menu").ready(function(){
        $("li.menli").mouseover(function(){
            $(this).addClass("active");
        });
        $("li.menli").mouseout(function(){
            $(this).removeClass("active");
        });
    });


    aber ich sehe ein, dass sein code oben unwesentlich mehr geschreibse wäre...
    aber ok ich geb mich geschlagen... macht des so wie oben und wenns nich fruchtet viel erfolg bei der fehlersuche...