Avatar billede Slettet bruger
30. juli 2007 - 17:05 Der er 18 kommentarer og
2 løsninger

Udregning med javascripts

Jeg er forholdsvis ny indenfor javascripts, i hvert fald når det kommer til selv at skulle skrive noget.
Jeg er ved at lave en lille udregning fra danske penge til Harry Potter penge.
Selve formlen er simpel, og virker ganske fint på min hjemmeside, hvor den er skrevet i php, men nu ønsker jeg den i javascript.

Dette er hvad jeg har lavet indtil videre:

<script language="JavaScript" type="text/javascript">
<!--
    function magicalMoney(form)
    {
        var kr = mugglemagic.kr.value;   
            if(!isNaN(kr))
            {
                var knuts = (kr * 0.11);
                var gold = (knuts / 493);
                var gold = floor(gold);
                var knuts = (knuts - (gold * 493));
                var silver = (knuts / 29);
                var silver = floor(silver);
                var knuts = (knuts - (silver * 29));
               
                    mugglemagic.g.value = gold;
                    mugglemagic.s.value = silver;
                    mugglemagic.k.value = knuts;
            }
    }
//-->
</script>

<form name="mugglemagic">
Antal kroner (helt tal) <input type="text" name="kr" onblur="magicalMoney(this.form)" onkeyup="magicalMoney(this.form)" /><br />
Galleoner <input name="g" value="0" /><br />
Sølvsegl <input name="s" value="0" /><br />
Knut <input name="k" value="0" /><br />
</form>

<!-- slut -->

Problemet er bare, at resultatet ikke kommer ned i formen.
Hvis jeg kun udregner antal knut ud fra antal kr, og sletter resten i udregningen, så er der ingen problemer og det vises korrekt.
Så snart jeg beder den om at lave resten af udregningen, så giver den fejl.

Jeg er sikker på, at løsningen er nem. Det er garanteret måden jeg angiver fortløbende variabler på der ødelægger det hele, men jeg kan ikke se hvorfor.

Håber der er nogle, der lige har svaret.
På forhånd tak.
Avatar billede kalp Novice
30. juli 2007 - 17:09 #1
<script language="JavaScript" type="text/javascript">
<!--
    function magicalMoney(form)
    {
        var mugglemagic = form;
        var kr = mugglemagic.kr.value;   
            if(!isNaN(kr))
            {
                var knuts = (kr * 0.11);
                var gold = (knuts / 493);
                var gold = floor(gold);
                var knuts = (knuts - (gold * 493));
                var silver = (knuts / 29);
                var silver = floor(silver);
                var knuts = (knuts - (silver * 29));
               
                    mugglemagic.g.value = gold;
                    mugglemagic.s.value = silver;
                    mugglemagic.k.value = knuts;
            }
    }
//-->
</script>
Avatar billede Slettet bruger
30. juli 2007 - 17:17 #2
Det gjorde ikke nogen forskel.
Avatar billede kalp Novice
30. juli 2007 - 17:19 #3
var knuts = (kr * 0.11);
                var gold = (knuts / 493);
                gold = floor(gold);
                knuts = (knuts - (gold * 493));
                var silver = (knuts / 29);
                silver = floor(silver);
                knuts = (knuts - (silver * 29));
Avatar billede thesurfer Nybegynder
30. juli 2007 - 17:19 #4
kr skal højst sandsynligt parses til float, hvis værdien kan indeholder kommatal.. ellers kan int bruges..

Eksempel:

        var kr = parseFloat(mugglemagic.kr.value);
Avatar billede kalp Novice
30. juli 2007 - 17:21 #5
den der foor()

hvad er det? er det en php function?
eller er det javascript??
Avatar billede kalp Novice
30. juli 2007 - 17:21 #6
floor()
Avatar billede erikjacobsen Ekspert
30. juli 2007 - 17:22 #7
Du skal nok bruge Math.floor
Avatar billede kalp Novice
30. juli 2007 - 17:26 #8
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML>
<HEAD>
<TITLE> New Document </TITLE>
<META NAME="Generator" CONTENT="EditPlus">
<META NAME="Author" CONTENT="">
<META NAME="Keywords" CONTENT="">
<META NAME="Description" CONTENT="">
</HEAD>

<BODY>
<script language="JavaScript" type="text/javascript">
<!--
    function magicalMoney()
    {
        var mugglemagic = document.getElementById('mugglemagic');
        var kr = mugglemagic.kr.value;   
            if(!isNaN(kr))
            {
                var knuts = (kr * 0.11);
                var gold = (knuts / 493);
                gold = Math.floor(gold);
                knuts = (knuts - (gold * 493));
                var silver = (knuts / 29);
                silver = Math.floor(silver);
                knuts = (knuts - (silver * 29));
               
                    mugglemagic.g.value = gold;
                    mugglemagic.s.value = silver;
                    mugglemagic.k.value = knuts;
            }
    }
//-->
</script>
<form id="mugglemagic" name="mugglemagic">
Antal kroner (helt tal) <input type="text" name="kr" onblur="magicalMoney()" value="" onkeyup="magicalMoney()" /><br />
Galleoner <input name="g" value="0" /><br />
Sølvsegl <input name="s" value="0" /><br />
Knut <input name="k" value="0" /><br />
</form>

</BODY>
</HTML>
Avatar billede Slettet bruger
30. juli 2007 - 17:27 #9
Wow, så virker det.
Syntes eller jeg havde prøvet alt det der igår også.
Det må have været kombinationen af Math.floor og parseFloat der gjorde forskellen.
Det virker i alt fald nu.
Thesurfer og erikjacobsen i bedes lægge svar :)
Avatar billede Slettet bruger
30. juli 2007 - 17:28 #10
Den færdige løsning blev:

<script language="JavaScript" type="text/javascript">
<!--
    function magicalMoney(form)
    {
        var kr = parseFloat(mugglemagic.kr.value);
            if(!isNaN(kr))
            {
                var knuts = (kr * 0.11);
                var gold = (knuts / 493);
                var gold = Math.floor(gold);
                var knuts = (knuts - (gold * 493));
                var silver = (knuts / 29);
                var silver = Math.floor(silver);
                var knuts = (knuts - (silver * 29));
               
                    mugglemagic.g.value = gold;
                    mugglemagic.s.value = silver;
                    mugglemagic.k.value = knuts;
            }
    }
//-->
</script>

<form name="mugglemagic">
Antal kroner (helt tal) <input type="text" name="kr" onblur="magicalMoney(this.form)" onkeyup="magicalMoney(this.form)" /><br />
Galleoner <input name="g" value="0" /><br />
Sølvsegl <input name="s" value="0" /><br />
Knut <input name="k" value="0" /><br />
</form>
Avatar billede erikjacobsen Ekspert
30. juli 2007 - 17:30 #11
Ingen point til mig, tak.
Avatar billede Slettet bruger
30. juli 2007 - 17:31 #12
Så synes jeg kalp skal have point for indsatsen.
Avatar billede thesurfer Nybegynder
30. juli 2007 - 17:33 #13
Jeg deler gerne med kalp..
Avatar billede Slettet bruger
30. juli 2007 - 18:14 #14
Retter lige mig selv. Den korrekte løsning blev:

<script language="JavaScript" type="text/javascript">
<!--
    function magicalMoney(form)
    {
        var kr = parseFloat(mugglemagic.kr.value);
            if(!isNaN(kr))
            {
                var knuts = Math.round((kr / 0.11));
                var gold = (knuts / 493);
                var gold = Math.floor(gold);
                var knuts = (knuts - (gold * 493));
                var silver = (knuts / 29);
                var silver = Math.floor(silver);
                var knuts = (knuts - (silver * 29));
               
                    mugglemagic.g.value = gold;
                    mugglemagic.s.value = silver;
                    mugglemagic.k.value = knuts;
            }
    }
//-->
</script>
Avatar billede thesurfer Nybegynder
30. juli 2007 - 18:21 #15
Jeg ville nu nok hellere bruge:

                var knuts = Math.round((kr / 0.11));
                var gold = (knuts / 493);
                gold = Math.floor(gold);
                knuts = (knuts - (gold * 493));
                var silver = (knuts / 29);
                silver = Math.floor(silver);
                knuts = (knuts - (silver * 29));

At erklære en variabel ("var variabelnavn") 1 gang er nok.. :-)
Avatar billede thesurfer Nybegynder
30. juli 2007 - 18:24 #16
Du kunne også bare gøre det udenfor funktionen:

<script language="JavaScript" type="text/javascript">
<!--
knuts = 0;
gold = 0;
silver = 0;

    function magicalMoney(form)

Hvis den klager over det, kan det være at der skal stå 0.0:


knuts = 0.0;
gold = 0.0;
silver = 0.0;


Om man bruger "var" eller ej, påvirker adgangen til variablen..

Jeg mener at "var" begrænser adgangen til det samme scope, hvor "var variabelnavn" bliver afviklet..

Men er ikke helt sikker..
Avatar billede kalp Novice
30. juli 2007 - 19:27 #17
kommer her.. og er enig i et en variabel kun skal erklæres en gang:)
var også en del af min rettelse (og var faktisk overrasket over man kunne det andet:) )
Avatar billede Slettet bruger
30. juli 2007 - 19:51 #18
Så man behøver kun at angive at for eksempel gold er en variabel én gang, og derfra kan jeg så lege videre med gold som jeg har lyst til?
Kunne være man skulle købe sig en bog om emnet. Alt jeg ved om js (og det er ufatteligt lidt) er noget jeg har læst mig til her på siden.
Men jeg takker mange gange for hjælpen. Nu virker det, og så kan jeg jo lege videre med det jeg nu har lært.
Avatar billede kalp Novice
30. juli 2007 - 20:00 #19
yeps.. du erklære variablen en gang og så kan du lege med den efterfølgende uden, at skrive "var" foran det.
men ja det forvirrer vel lidt når man i PHP sikkert skriver $ foran variabler hele tiden.

JavaScript er måske lidt et gummi sprog når den tillader så mange forskellige måder at gøre det på..
Personligt erklære jeg altid mine variabler, men mener også den godkender, at man bare skriver et eller andet og gemmer noget over i det - så har man også oprettet en variabel indirekte.

så alt dette vil nok virke..

var something;
something = 'test';
-------------- eller --------------
something = 'test;
--------------- eller --------------
var something;
var something = 'test';

som du har gjort..

og ved ikke om der er flere muligheder.
Avatar billede olebole Juniormester
31. juli 2007 - 15:10 #20
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