Avatar billede mimi Nybegynder
19. marts 2001 - 14:53 Der er 5 kommentarer og
1 løsning

JavaScript - Hjælp!!

Vi er to begyndere, som har et lille bitte problem i forbindelse med en skoleopg.

Her er scriptet:

<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.0 Transitional//EN\">

<html>
<head>
    <title>Prototype</title>
    <SCRIPT LANGUAGE=\"JavaScript\">
    //Konstruktion af bogsamling
    function Bog(index, titel, forfatter, pris, billedref){
            this.index = index
            this.titel = titel
            this.forfatter = forfatter
            this.pris = pris
            this.billedref = billedref
            //metoder
            this.varebeholdning = varebeholdning;
            }
           
    function varebeholdning() {
            document.writeln(\"<p>Index    : \" +this.index+ \"<br>\");
            document.writeln(\"Titel    : \" +this.titel+ \"<br>\");
            document.writeln(\"Forfatter : \" +this.forfatter+ \"<br>\");
            document.writeln(\"Pris        : \" +this.pris+ \" Kr.<br>\");
            document.writeln(\"<img src=\'\" +this.billedref+ \"\'<br>\");
            }   
   
    //Konstruktion af indkøbskurv
    function IndkoebsKurv(Indhold,saldo){
            this.Indhold = new Array();
            this.saldo = saldo;
            //metoder
            this.visIndhold = visIndhold;
            this.tilfoej = tilfoej;
            this.slet = slet;
            }
   
    function tilfoej(Bog){
            this.Indhold[this.Indhold.length] = Bog;
            }
           
    function slet(Bog){
            var i=0;
            while(Bog!=this.Indhold[i]){i++;}       
            this.Indhold[i]=\"\";
            }
           
    function visIndhold(){
        document.write(\"<p><b>Indkøbskurven indeholder følgende:</b>\");
        var subSaldo=0;
        var moms=0;           
        for(var i=0; i<=(this.Indhold.length-1);i++){
            if(this.Indhold[i]!=\"\"){
                document.write(\"<p>\"+this.Indhold[i].titel+\", \"+this.Indhold[i].pris+\" kr.\");
               
                subSaldo += parseInt(this.Indhold[i].pris) ;
                document.write(\"<hr>Du har købt for: \"+subSaldo+\" Kr.<BR>\");
            }           
        }
        moms=Math.round(subSaldo*0.25);         
            document.write(\"Heraf moms (25%): \"+moms+\" kr.\");
        document.write(\"<HR>\");
        }
           
   
           
    //brugsscenarie 1.3***************************************************************       
   
    //Skabelse af bøger og bogsamling
    Bog0 = new Bog(1,\"JavaScript Application Cookbook\",\"Jerry Bradenbaugh\",360,\"bog1.jpg\");
    Bog1 = new Bog(2,\"Internet and WWW How to program\",\"Deitel & Deitel\",450,\"bog2.jpg\");
    Bog2 = new Bog(3,\"DHTML For the World Wide Web\",\"Jason C. Teague\",250,\"bog3.jpg\");
    Bog3 = new Bog(4,\"Building Web Applications with UML\",\"Jim Conallen\",300,\"bog4.jpg\");
   
    bogSamling=[Bog0,Bog1,Bog2,Bog3];         
   
    //skabelse af indkøbskurv
    Kurv=new IndkoebsKurv();
       
    //Test af metoder
   
    //Her bliver udvalget vist
    Bog0.varebeholdning();
    Bog1.varebeholdning();
    Bog2.varebeholdning();
    Bog3.varebeholdning();
   
    //Her tilføljes bog nr. 1 til varekurven
    Kurv.tilfoej(bogSamling[0]);

    //Her vises indholdet af varekurven
    Kurv.visIndhold();

    //Her bliver udvalget vist igen
    Bog0.varebeholdning();
    Bog1.varebeholdning();
    Bog2.varebeholdning();
    Bog3.varebeholdning();
   
    //Her tilføjes bog nr. 2 til varekurven
    Kurv.tilfoej(bogSamling[1]);

    //Her vises indholdet af varekurven
    Kurv.visIndhold();

    //Her slettes bog nr. 2 fra varekurven
    Kurv.slet(bogSamling[1]);

    //Her vises indholdet af varekurven
    Kurv.visIndhold();
   
    //Her skal bestillingsformularen vises
    //bestillingsformular();
   
   
    </SCRIPT>
       
</head>

<body>



</body>
</html>

Problemet er, når indkøbskurven indeholder to bøger. Der vises den samlede pris efter hver bog, hvor den helst kun skulle vises efter 2. bog, da vi ikke har noget at bruge mellemregningen til.

Jeg skal have flyttet min Subtotal, men hvorhen? Jeg har prøvet mig lidt frem, men så melder den fejl...
Avatar billede ldanielsen Nybegynder
19. marts 2001 - 16:10 #1
Ret visIndhold funktionen til:

function visIndhold(){
        document.write(\"<p><b>Indkøbskurven indeholder følgende:</b>\");
        var subSaldo=0;
        var moms=0;           
        for(var i=0; i<=(this.Indhold.length-1);i++){
            if(this.Indhold[i]!=\"\"){
                document.write(\"<p>\"+this.Indhold[i].titel+\", \"+this.Indhold[i].pris+\" kr.\");
               
                subSaldo += parseInt(this.Indhold[i].pris) ;
                if (i == this.Indhold.length-1)document.write(\"<hr>Du har købt for: \"+subSaldo+\" Kr.<BR>\");
            }           
        }
        moms=Math.round(subSaldo*0.25);         
            document.write(\"Heraf moms (25%): \"+moms+\" kr.\");
        document.write(\"<HR>\");
        }
Avatar billede mimi Nybegynder
19. marts 2001 - 16:34 #2
KANON! Det virker, men det er blot det lille problem, at til sidst, når indholdet skal vises efter bog nr. 2 er slettet, bliver mit <br> ingoreret og \"JavaScript Application Cookbook, 360 kr.Heraf moms (25%): 90 kr.\" står på én linje.... ??????
Avatar billede ldanielsen Nybegynder
19. marts 2001 - 16:43 #3

if (i == this.Indhold.length-1)document.write(\"<hr>Du har købt for: \"+subSaldo+\" Kr.\");
document.write(\"<br>\");
Avatar billede mimi Nybegynder
19. marts 2001 - 16:49 #4
Den ignorerer stadig linjen, hvor den skal udskrive: \"Du har købt for: --- kr.\"

....
Avatar billede jakoba Nybegynder
20. marts 2001 - 06:56 #5
function visIndhold(){
        document.write(\"<p><b>Indkøbskurven indeholder følgende:</b>\");
        var subSaldo=0;
        var moms=0;         
        for(var i=0; i<=(this.Indhold.length-1);i++){
            if(this.Indhold[i]!=\"\"){
                document.write(\"<p>\"+this.Indhold[i].titel+\", \"+this.Indhold[i].pris+\" kr.\");
             
                subSaldo += parseInt(this.Indhold[i].pris) ;
// fjernet    if (i == this.Indhold.length-1)document.write(\"<hr>Du har købt for: \"+subSaldo+\" Kr.<BR>\");
            }         
        };
// indsat:
        document.write(\"<hr>Du har købt for: \"+subSaldo+\" Kr.<BR>\");
        moms=Math.round(subSaldo*0.25);       
            document.write(\"Heraf moms (25%): \"+moms+\" kr.\");
        document.write(\"<HR>\");
        }

Du skal nok have flyttet linien ud af forløkken, hvor den fx ikke vil blive udført hvis sidste element i arrayet er tomt.
prøv med funktionen ovenfor.

mvh JakobA
Avatar billede mimi Nybegynder
20. marts 2001 - 08:40 #6
Kanon - det virker bare nu. Tusind tak for hjælpen!
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