Avatar billede Nojsa Juniormester
20. marts 2019 - 15:21 Der er 15 kommentarer og
1 løsning

Javascript loop

Hej!

Har lavet et lille script hvor jeg tilføjer et tal til en variabel ved tryk af en tast på tasteturet. Det virker perfekt, indtil videre.

Mit problem er dog at jeg gerne vil bruge det tal inde i en løkke og alt hvad det er for et tal der står i min variabel så skal løkken lave en ekstra linje.

min kode ser sådan her ud:

    var nativeNR = 1;

    function addOne() {
        nativeNR = nativeNR + 1;
        document.getElementById("nativeNR").innerHTML = nativeNR;
    }

    function subOne() {
        if(nativeNR > 1)
        {
            nativeNR = nativeNR - 1;
            document.getElementById("nativeNR").innerHTML = nativeNR;
        }
    }

    var text = "";
    var i = 0;
    while (i < nativeNR) {
        text += "The number is " + i + "<br>";
        i++;
    }

    document.getElementById("formular").innerHTML = text;
   




oppe i toppen af min html dokument har jeg så skrevet det her:

Den linje her er fordi at jeg gerne vil tjekke om min variabel nu også bliver opdateret:
current amount <span id="nativeNR"></span>

og den her linje er så den som skulle udskrive min while løkke:
<p id="formular"></p>

nogen der kan hjælpe mig videre her? håber i forstår hvad det er jeg vil :D
Avatar billede Slater Ekspert
20. marts 2019 - 15:33 #1
Som jeg forstår spørgsmålet, er du der allerede - det eneste du mangler er at udføre din løkke når du opdaterer tallet. Men måske misforstår jeg.

http://snip.kilolima.dk/#/pVvCa7W

Kan du i så fald forklare bedre, hvad du vil have den til?
Avatar billede Nojsa Juniormester
20. marts 2019 - 15:46 #2
Var faktisk lige akkurat det jeg skulle bruge, det er bare et lille men. Hvis jeg nu vil udskrive en formular i løkken og så tilføjer et tal i 'nativeNR variablen' så vil den selfølgelig slette hvad jeg havde skrevet i min første textbox. Er det fordi at jeg skal have lagt det data som er i den første textbox ind i et array? eller hvad ville du gøre?
Avatar billede Slater Ekspert
20. marts 2019 - 16:05 #3
Ah, på den måde. Det ville jeg nok gøre ved dynamisk at skabe og tilføje elementet, i stedet for at gentegne hele listen hver gang der klikkes. F.eks. sådan:

http://snip.kilolima.dk/#/APrrOFq
Avatar billede Nojsa Juniormester
20. marts 2019 - 16:17 #4
hvis jeg så vil lave flere inputs til højre, hvad er det så jeg skal gøre?
Avatar billede Slater Ekspert
20. marts 2019 - 16:19 #5
Ikke forstået. Til højre for hvad? Hvilke inputs?

Hvis du bare ikke vil have de skifter linje, fjerner du bare display: block fra CSS'en.
Avatar billede Nojsa Juniormester
20. marts 2019 - 16:22 #6
Det er fordi at der sikkert skal bruges 8 input i en linje, men der skal kunne tilføjes 8 linjer neden for.

og for hver linje skal de smides ind i en DB som en post. Den næste linje for en nummer to post, OSV...
Avatar billede Slater Ekspert
20. marts 2019 - 16:30 #7
Ah, på den måde. Så for hver klik på knappen skal der komme flere inputs? Det kan du f.eks. gøre sådan: http://snip.kilolima.dk/#/5xpRH98
Avatar billede Nojsa Juniormester
20. marts 2019 - 16:34 #8
Perfekt, nu når jeg har dig, er det så muligt at kunne slette post nummer fem selv om at der er 30 poster?
Avatar billede Nojsa Juniormester
20. marts 2019 - 16:39 #9
Måske jeg hellere skulle finde nogle gode javascript kurser på nettet, syntes lige nu at du laver alt mit arbejde xD
Avatar billede Nojsa Juniormester
20. marts 2019 - 16:51 #10
Det var nemlig derfor at jeg troede at jeg skulle bruge en løkke, for så kunne man vel slette den post som matcher nativeNR med det tal i løkken som man vil slette?
Avatar billede Slater Ekspert
20. marts 2019 - 17:18 #11
En løkke kan være fin, men den er ikke så god til at tegne UI elementer, da den som udgangspunkt tegner alle elementerne forfra ved hver ændring. Det fandt du selv ud af hvorfor er en skidt ting. Det er bedre at tilføje og fjerne DOM-elementer direkte.

Du kan godt gøre så du kan slette en bestemt af dem. F.eks. med et ikon ved hver eller sådan noget. F.eks. sådan: http://snip.kilolima.dk/#/MZzjD36
Avatar billede Nojsa Juniormester
20. marts 2019 - 17:26 #12
Ej hvor godt! var lige det jeg skulle bruge! når det nu er jeg skal smide alle de data fra den formel her ind i en DB så skal jeg selfølgelig bruge en løkke. Men den løkke skal vide hvor mange gange den skal køre igennem, er der så sådan at der er et id ud for hver linje i det du allerede har lavet?
Avatar billede Slater Ekspert
20. marts 2019 - 20:19 #13
Har du brug for et id, eller skal du have have alle felterne?

Som det er nu er der intet id sendt med. Du kan sagtens løbe igennem dem og sætte alle rækkerne ind fra en backend, men hvis du f.eks. sletter række 2, har du ingen mulighed fra backenden for at vide at netop den række er væk. Det vil bare komme ind som 1, 2, 3 -- ikke 1, 3, 4.

Hvis du vil have sådan et id, skal det tilføjes i et hidden input felt eller lignende.
Avatar billede Nojsa Juniormester
20. marts 2019 - 22:08 #14
Nej et id er selfølgelig ligemeget :D men hvis jeg skal finde ud af hvor mange gange det er jeg skal køre en php for løkke med in sql inset i, så skal der vel være noget tal med i javascripten?
Avatar billede Slater Ekspert
20. marts 2019 - 23:26 #15
Nej, du kan bare tælle dem med PHP. Med de navne i mit eksempel (input1, osv), kan du f.eks. bruge
count($_POST['input1'])
- naturligvis forudsat du bruger POST.

Du kan udskrive alle de postede input-værdier med:
$max = count($_POST['input1']);
for ($i = 0; $i < $max; $i++) {
  echo $_POST['input1'][$i] . ', ' . $_POST['input2'][$i] . ', ' . $_POST['input3'][$i] . '<br>';
}

Så skal de bare ind i en SQL sætning eller bind_param()
Avatar billede Nojsa Juniormester
20. marts 2019 - 23:56 #16
aah ja okay vidste jeg ikke at man kunne! havde ikke tænkt over at der var en funktion i php til netop det! tak skal du have!
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