Avatar billede mikoalngelo Nybegynder
19. juni 2003 - 17:45 Der er 24 kommentarer og
1 løsning

Gøre function global på trods af omkringliggende {}er

Hvordan gør man en function, som er inde i en anden til at blive global?
Avatar billede roenving Novice
19. juni 2003 - 17:52 #1
Har du prøvet med ydreFunktion.indreFunktion ...
Avatar billede mikoalngelo Nybegynder
19. juni 2003 - 17:59 #2
Øjeblik...
Avatar billede mikoalngelo Nybegynder
19. juni 2003 - 18:00 #3
Avatar billede mikoalngelo Nybegynder
19. juni 2003 - 18:27 #4
Er du der?
Ik' for at presse på...
Avatar billede roenving Novice
19. juni 2003 - 18:31 #5
Jeg firstår ikke helt hvad det er du vil ...

Hvorfor skal funktionerne defineres inde i en anden funktion ?-)

Hvis det var et objekt du oprettede kunne jeg se en mening med det (men ville nok alligevel vælge at definere dem udenfor), men her er det bare din start-funktion -- den kan da lige så godt kalde funtionerne udenfor sig selv ?o]
Avatar billede mikoalngelo Nybegynder
19. juni 2003 - 18:34 #6
Kalde funktionerne udenfor sig selv? Hvordan er det muligt?
Og grunden til, at jeg har sat det i StartOp() er, at jeg helst vil have scriptet overskueligt...
Avatar billede mikoalngelo Nybegynder
19. juni 2003 - 18:36 #7
Har lige oploaded igen...
Prøv at se nu, og se fejlen...
Avatar billede roenving Novice
19. juni 2003 - 18:40 #8
Jamen du har da dobbelte definitioner -- det bliver scriptet da ikke mere overskueligt af ...

Du kan da lige så godt:

<SCRIPT type='text/javascript'>

    function Valider(){
        Rigtige        =    0;
        Forkerte    = 0;
        VS = document.VSform.VSOk.checked;
        for (a = 0; a < Svar.Sv1.length; a++){ //>
            eval('Sel = document.f.Spm' + a);
            if(Sel.selectedIndex == 0)
                Forkerte += (VS)?1:0;
            else if(Sel.selectedIndex == Svar.Rsv[a])
                Rigtige += 1;
            else
                Forkerte += 1;
        }
        alert("Rigtige: " + Rigtige + "\nForkerte: " + Forkerte);
    }
    function Validering(){
        Valider();
    }
    function Erstat(Streng, Tegn, Erstatning){
        Soeg = 0;
        while (Soeg != -1){
            Soeg = Streng.search(Tegn);
            if (Soeg != -1){
                Streng = Streng.substring(0, Soeg) + Erstatning + Streng.substring(Soeg+1, Streng.length+1);
            }
        }
        return Streng;
    }
    function Omform(Text){
        Text = Erstat(Text, " ", "_");
        Text = Erstat(Text, "æ", "æ");
        Text = Erstat(Text, "ø", "ø");
        Text = Erstat(Text, "å", "å");
        Text = Erstat(Text, "Æ", "Æ");
        Text = Erstat(Text, "Ø", "Ø");
        Text = Erstat(Text, "Å", "Å");
        return Text;
    }
    function Spm(Spm, Sv1, Sv2, Rsv){
        this.Spm = Spm;
        this.Sv1 = Sv1;
        this.Sv2 = Sv2;
        this.Rsv = Rsv;
        Spmer.innerHTML += '<BR>' +
            Spm + '<BR>' +
            '<SELECT id="Spm' + Taeller + '">' +
                '<OPTION value="VS">Vælg svar</OPTION>' +
                '<OPTION value="' + Omform(Sv1) + '">' + Sv1 + '</OPTION>' +
                '<OPTION value="' + Omform(Sv2) + '">' + Sv2 + '</OPTION>' +
            '</SELECT>';
        Svar.Sv1[Taeller] = Sv1;
        Svar.Sv2[Taeller] = Sv2;
        Svar.Rsv[Taeller] = Rsv;
        Taeller++;
    }
    function Tilfoj(tSpm, tSv1, tSv2, tRsv){
        eval('Spm' + Taeller + ' = new Spm("' + tSpm + '", "' + tSv1 + '", "' + tSv2 + '", ' + tRsv + ');');
    }

function StartOp(){
    var Svar    = new Array('Sv1', 'Sv2', 'Rsv');
    Svar.Sv1    = new Array();
    Svar.Sv2    = new Array();
    Svar.Rsv    = new Array();
    var Spmer    = (document.getElementById)?document.getElementById('SpmDIV'):(document.all)?document.all['SpmDIV']:null;
    Taeller        = 0
       
    Tilfoj("Hvad hedder den lille gyldne kugle i 'quidditch'?", "Den gyldne komet", "Det gyldne lyn", 2);
   
}
</SCRIPT>
Avatar billede roenving Novice
19. juni 2003 - 18:44 #9
Umiddelbart ville jeg lave denne linje anderledes, men da jeg ikke har forstået hvad du ønsker, er jeg ikke sikker ...

Sel = eval('document.f.Spm' + a);
Avatar billede mikoalngelo Nybegynder
19. juni 2003 - 18:54 #10
Hvad er der egentligt galt med Sel.selectedIndex?
Avatar billede roenving Novice
19. juni 2003 - 19:05 #11
Åbenbart genkender scriptet den åbenbart ikke som en select, for ellers ville .selectedIndex være gyldigt ...
Avatar billede mikoalngelo Nybegynder
19. juni 2003 - 19:40 #12
Kan det være på grund af, at den kører den kode FØR boksene bliver lavet?
Avatar billede roenving Novice
19. juni 2003 - 19:47 #13
Det ligger jo i funktioner, så det er først når funktionerne kaldes koden udføres, men prøv at sætte nogle alert-boxe ind der, hvor der kommer fejl, så kan du få en ide om, hvordan dine funktioner reagerer ...

Start med at sætte en alert på lige før Sel får en værdi og alert('document.f.Spm' + a)
Avatar billede mikoalngelo Nybegynder
19. juni 2003 - 19:56 #14
Prøv lige at tjekke nu...
Avatar billede mikoalngelo Nybegynder
19. juni 2003 - 20:21 #15
OT: Hvad siger du til det nye farvesæt (Det har bare fået en ny farve på linksene...)
Avatar billede mikoalngelo Nybegynder
19. juni 2003 - 20:28 #16
Jeg TROR, at jeg har indkredset fejlen til at være, at den overhovedet ikke "fanger" formen...
Avatar billede roenving Novice
19. juni 2003 - 20:35 #17
Hov, du ender med TO forms, som hedder f ...

-- og så kan du selvfølgelig ikke finde nogetsomhelst

-- du må lige igennem din kode, så du ikke får oprettet flere forms med samme navn ...
Avatar billede mikoalngelo Nybegynder
19. juni 2003 - 20:53 #18
Hvorhenne gør jeg det?
Jeg kan ikke se det...
Avatar billede roenving Novice
19. juni 2003 - 21:00 #19
Fordi du har rod i koderne forsøger browseren at rette op på det -- ændr dette:

<div align="left" id="SpmDIV">
    <form name="VSform">   
        <input type="checkbox" value="VSOk" name="VSOk" checked="checked"> Opfat "V? svar" som forkert svar
    </form>
    <form name="f">
</div>
        <input type="button" value="Valider" onclick="Validering();">
    </form>

-- til:

<div align="left" id="SpmDIV">
    <form name="VSform">   
        <input type="checkbox" value="VSOk" name="VSOk" checked="checked"> Opfat "V? svar" som forkert svar
    </form>
</div>
    <form name="f">
        <input type="button" value="Valider" onclick="Validering();">
    </form>

-- og find dine selects vha. document.getElementById i stedet ...
Avatar billede Slettet bruger
20. juni 2003 - 09:20 #20
P.S. Brug ikke eval, men elements-arrayet:

Sel = document.formNavn.elements["Spm" + a];
Avatar billede mikoalngelo Nybegynder
20. juni 2003 - 13:20 #21
Jeg har fået det til at virke (ville skrive det i går, men internettet gik ned).
Smid et svar, og få dine p. (Du får lige 30, for der var jo lidt mere kodning end som så...)
Avatar billede roenving Novice
21. juni 2003 - 14:25 #22
Bueno '-)
Avatar billede mikoalngelo Nybegynder
22. juni 2003 - 12:03 #23
Here you go...
Avatar billede roenving Novice
22. juni 2003 - 13:49 #24
Takker for points ;~}
Avatar billede mikoalngelo Nybegynder
22. juni 2003 - 14:00 #25
Sæl tak
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester