Avatar billede Ulrich Seniormester
18. september 2017 - 22:45 Der er 8 kommentarer og
1 løsning

Hvorfor hopper den ud af for next loop?

Hvis fx Akt1 til Akt12 findes og Akt13 ikke findes og Akt14 til Akt40 findes, stopper den ved Akt 12 og kommer ikke videre?

Checkbox jeg kontrollere på i JS:
      <font face="Verdana">&nbsp;<input type="checkbox" name="Akt<% Response.Write(T) %>" id="Akt<% Response.Write(T) %>" onclick="enableGem(<% Response.Write(T) %>)" size="50" class="Outline" maxlength="50" tabindex="9" value="checked" <%response.write navneopslag("Akt" & T)%>></font></td>

Dropdown jeg kontrollere på i JS:
      <select size="1" name="Akt<% Response.Write(T) %>Betalt" id="Akt<% Response.Write(T) %>Betalt" onclick="enableGem(<% Response.Write(T) %>)" tabindex="11" class="Outline">


    function enableGem(nummerknap) {
        document.getElementById('gem').style.backgroundColor = "#A6FFA6";
        document.getElementById('gem').disabled = false;

        document.getElementById('SamletSum').innerHTML = "0";
        var t;
        for (t = 1; t < 41; t++) {
    if (document.getElementById('Akt'+t).checked == true && document.getElementById('Akt'+t+'Betalt').value != "") {
        document.getElementById('SamletSum').innerHTML = parseInt(document.getElementById('AktPrisLabel('+t+')').innerHTML) + parseInt(document.getElementById('SamletSum').innerHTML);
    } 
    }
        document.getElementById("form1").submit();
    }
Avatar billede Slettet bruger
18. september 2017 - 23:10 #1
ja hvis 13 ikke findes, stopper den ved 12.
det er fordi du kan ikke stoppe+starte et for loop. det kører uendeligt, indtil 40 her, og kan ikke "genstartes".

du har tabindex=11, og læg 1 til, det er 12, den stopper efter du har skrevet i 12 tabs.

#
Dropdown jeg kontrollere på i JS:
      <select size="1" name="Akt<% Response.Write(T) %>Betalt" id="Akt<% Response.Write(T) %>Betalt" onclick="enableGem(<% Response.Write(T) %>)" tabindex="11" class="Outline">
Avatar billede Ulrich Seniormester
18. september 2017 - 23:46 #2
Hvordan får jeg den så til at fortsætte selv om betingelsen i if sætningen ikke er opfyldt?
Den skal kontrollere på alle op til 40 også selv om der er nogen betingelser i if der ikke er der.
Akt12 og 13 var kun et eksempel, det samme opstår hvis fx 3 ikke findes i if sætningen, så hopper den ud. Her skal den tælle videre til 40 da der er flere efter 3 der er opfyldt.
Avatar billede Slettet bruger
19. september 2017 - 04:56 #3
WHILE betingelse DO {
}

er måske bedre end FOR
Avatar billede Slettet bruger
19. september 2017 - 04:58 #4
quit=false;

WHILE betingelse AND quit=false DO {
gør noget 1
gør noget 2
gør noget 3
j=j++
if j=40 then quit=true
}
Avatar billede softspot Forsker
19. september 2017 - 07:41 #5
Det er muligvis fordi der opstår en kørselsfejl i scriptet, når du forsøger at tilgå checked på null (når elementet ikke findes).

Du skal tjekke om elementet findes inden du tilgår checked. Det kan du gøre ved f.eks. at lægge elementet over i en variabel og tjekke på null inden du tjekker på checked.

function enableGem(nummerknap) {
    document.getElementById('gem').style.backgroundColor = "#A6FFA6";
    document.getElementById('gem').disabled = false;

    document.getElementById('SamletSum').innerHTML = "0";
    var t;
    for (t = 1; t < 41; t++) {
        var akt = document.getElementById('Akt'+t),
            aktBetalt = document.getElementById('Akt'+t+'Betalt');
        if (akt && aktBetalt && akt.checked == true && aktBetalt.value != "") {
            document.getElementById('SamletSum').innerHTML =
                parseInt(document.getElementById('AktPrisLabel('+t+')').innerHTML) +
                parseInt(document.getElementById('SamletSum').innerHTML);
        } 
    }
    document.getElementById("form1").submit();
}


Der er stadig nogle ting som kan gå galt inde i if-sætningen, så her burde du måske også tjekke på eksistens inden du tildeler egenskaber værdier.

Alternativt kunne du også sætte en try...catch-blok omkring kroppen af din for-løkke. Det ville i det mindste gøre, at din løkke kører til ende, uanset om nogen af elementerne eksisterer.
Avatar billede Ulrich Seniormester
19. september 2017 - 21:56 #6
Hej softspot

Sådan! Din løsning virker.
Har brugt løsning 1, ikke din alternative løsning med try... catch, løsning 1 virker.
Men som du skriver er der stadig risiko for fejl i if sætningen og dermed ikke for sikker.
Jeg har googlet for at finde løsning med try... catch da jeg hellere vil bruge den.
Vil gerne at den kører til enden og skal ikke komme ud med melding om fejl, jeg skal bare være sikker på at den er kørt helt i gennem fra 1 til 40.
Kan du hjælpe med kode til try... catch så den kører helt i gennem lige så fint som dit løsning 1 forslag?
Hilsen Ulrich
Avatar billede softspot Forsker
19. september 2017 - 22:19 #7
function enableGem(nummerknap) {
    document.getElementById('gem').style.backgroundColor = "#A6FFA6";
    document.getElementById('gem').disabled = false;

    document.getElementById('SamletSum').innerHTML = "0";
    var t;
    for (t = 1; t < 41; t++) {
        try {
            var akt = document.getElementById('Akt'+t),
                aktBetalt = document.getElementById('Akt'+t+'Betalt');
            if (akt && aktBetalt && akt.checked == true && aktBetalt.value != "") {
                document.getElementById('SamletSum').innerHTML =
                    parseInt(document.getElementById('AktPrisLabel('+t+')').innerHTML) +
                    parseInt(document.getElementById('SamletSum').innerHTML);
            }
        }
        catch(e) {
        }
    }
    document.getElementById("form1").submit();
}
Avatar billede Ulrich Seniormester
19. september 2017 - 22:55 #8
Du er genial, det virker tak for hjælpen.
Avatar billede softspot Forsker
19. september 2017 - 22:57 #9
Velbekomme :-)
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

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