Avatar billede mabiom92 Nybegynder
26. januar 2012 - 23:08 Der er 7 kommentarer og
1 løsning

Forklaring på forskellige tags.

Hej herinde :-)

Jeg sidder med et IT projekt og jeg har fundet en booking form på nettet.
I sidste ende skal jeg kunne forklarer hvad de [b]enkelte tags betyder[b].
Håber I kan hjælpe med det :-)

Så her er den:
*function format(expr,decplaces)
{
*var str=""+Math.round(eval(expr)*Math.pow(10,dec-
places));
*while(str.length<=decplaces)
{ *str="0"+str;
}
*var decpoint=str.length-decplaces;
*return str.substring(0,decpoint) + "." + str.substring(decpoint,str.length);
}
*function Totalise()
{
*with(document.forms[0])
{

OBS! Ved godt * ikke skal være der :-)

Hvis I ikke forstår mit spørgsmål så mener jeg, at jeg godt vil vide hvad, expr, decplaces, var, eval, while osv. betyder :-)
Avatar billede olebole Juniormester
27. januar 2012 - 00:27 #1
<ole>

Uha, der er vist et stykke vej til en god karakter!

For det første er det ikke hele koden - der mangler noget i slutningen. Derudover bør du stille koden ordentligt op med indrykninger, så du selv og andre kan læse koden:

function format(expr,decplaces) {
    var str=""+Math.round(eval(expr)*Math.pow(10,dec-places));
    while(str.length<=decplaces) {
        str="0"+str;
    }
    var decpoint=str.length-decplaces;
    return str.substring(0,decpoint) + "." + str.substring(decpoint,str.length);
}
function Totalise() {
    with(document.forms[0]) {

Desuden bør du vide, at begrebet 'tags' hører hjemme i opmærkningssprog som HTML eller XML. JavaScript er et scriptsprog og indeholder ikke et eneste tag.

Til slut bør du nok vise os hele koden, så vi kan skrive den om til kode fra dette årtusinde. Den er tussegammel og potentiel usikker (og den var også dårlig, da den engang blev skrevet)  =)

/mvh
</bole>
Avatar billede mabiom92 Nybegynder
27. januar 2012 - 00:36 #2
Takker for dette konstruktive svar :-)

Her er hele koden :-)
<script language="javascript">

function format(expr,decplaces)
{
var str=""+Math.round(eval(expr)*Math.pow(10,decplaces));
while(str.length<=decplaces)
{
str="0"+str;
}
var decpoint=str.length-decplaces;
return str.substring(0,decpoint) + "." + str.substring(decpoint,str.length);
}
function Totalise()
{
with(document.forms[0])
{

if(Værelse1.checked) {
    Værelse1_Pris.value=format(250.00,2); }
else {
    Værelse1_Pris.value=format(0.00,2); }

if(Værelse2.checked) {
    Værelse2_Pris.value=format(500.00,2); }
else {
    Værelse2_Pris.value=format(0.00,2); }

if(Overnatning1.checked) {
    Overnatning1.value=format(1.00,2); }
else {
    Overnatning1.value=format(1.00,2); }

if(Overnatning2.checked) {
    Overnatning2.value=format(2.00,2); }
else {
    Overnatning2.value=format(1.00,2); }

if(Morgenmad.checked) {
    Morgenmadspris.value=format(50.00,2); }
else {
    Morgenmadspris.value=format(0.00,2); }

if(Person1.checked) {
    Person1.value=format(1.00,2); }
else {
    Person1.value=format(1.00,2); }

if(Person2.checked) {
    Person2.value=format(0.50,2); }
else {
    Person2.value=format(1.00,2); }
   
if(Person3.checked) {
    Person3.value=format(0.33,2); }
else {
    Person3.value=format(1.00,2); }
   
if(Person4.checked) {
    Person4.value=format(0.25,2); }
else {
    Person4.value=format(1.00,2); }

var
Sum=(parseFloat(Værelse1_Pris.value) + parseFloat(Værelse2_Pris.value) + parseFloat(Morgenmadspris.value)) * parseFloat(Overnatning1.value) * parseFloat(Overnatning2.value);

Total.value=format(Sum,2);

PrisPrPerson.value=(Sum * parseFloat(Person1.value) * parseFloat(Person2.value) * parseFloat(Person3.value) * parseFloat(Person4.value));


}
}
Totalise();
</script>
Avatar billede olebole Juniormester
27. januar 2012 - 02:50 #3
Hehe ... det bliver en del omskrivning, forklaring og kode. I det efterfølgende vil JavaScript være forkortet med JS. Hold fast ... here we go!  =)

Her er funktionen format, som jeg ville skrive den:

function format(num, decplaces) {
    // num afrundes til decplaces antal decimaler - og returneres
    return num.toFixed(decplaces);
}

Funktionen modtager et tal, num, som skal afrundes til decplaces (også et tal) decimaler. Funktionen returnerer resultatet af JS's indbyggede funktion toFixed (mere om funktioner og metoder i et indlæg efter dette).

Læg i øvrigt mærke til, at '//' skjuler resten af linjen for JS-motoren. Her kan jeg altså skrive kommentarer, som ikke indgår i den egentlige kode - tekst, som ikke forsøges afviklet som scriptkode.

En variabel er en slags placeholder - eller en kasse, om du vil - hvori, du blandt mange andre ting kan gemme et tal eller en stump tekst (kaldet 'en streng'). En variabel oprettes med JS's nøgleord var, og typisk sættes dens værdi samtidigt:

var mitTal = 123.456;
var minStreng = "olebole";

Nu kan du bruge disse to variabler til andre ting, og du kunne f.eks. gange tallet i mitTal med 3 og lægge det i en anden variabel:

var mitAndetTal = mitTal * 3;

- hvorefter mitAndetTal nu indeholder 370.368.

Det, brugeren har skrevet i et felt, kan aflæses på feltets value egenskab (dets value property på engelsk). Det gøres typisk sådan:

var tal = FORM.ELEMENT_NAME.value;

- hvor FORM er en reference til formen, og ELEMENT_NAME er name attributten på feltet.

Selvom der står et tal i et felt, vil dets value altid være en streng - altså en stump tekst. Prøver jeg derfor dette:

var tal = FORM.pris.value;
var resultat = tal + 10;

- og der står 100 i feltet, vil variablen resultat indeholde en tekst, bestående af ciffrene "10010".

JS-motoren tror, den skal tage teksten "100" og lægge 10 til, da den såkaldte operator + nemlig både kan bruges til at samle tekststrenge med - og til at lægge tal sammen med. Lidt noget roderi!  =)

Heldigvis kan JS konvertere en streng, bestående af ciffre, til et rigtigt tal. Til det bruges parseInt eller parseFloat. Den sidste medtager evt. decimaler og returnerer derfor et tal af datatypen, kaldet float (derfor parseFloat) - den første returnerer kun det hele tal, der står før kommaet (datatypen, kaldet integer - derfor parseInt).

var tal = parseFloat(FORM.pris.value);
var resultat = tal + 10;

Nu indeholder resultat tallet 110.

I JS kan man opstille en kontrolstruktur med en såkaldt if/else 'sætning':

if (BETINGELSE) {
    // Gør noget, hvis BETINGELSE er opfyldt
} else {
    // - ellers gør noget andet
}


Et checkbox eller radio element kan være checked, hvilket betyder, at det pågældende felt er valgt - f.eks. ved at brugeren har klikket på det. BETINGELSE i eksemplet ovenfor kunne altså være "Hvis checkbox'en minBox er valgt", og så kunne jeg altså skrive:

if (FORM.minBox.checked) {
    // minBox er valgt
    var num = 123;
} else {
    // minBox er ikke valgt
    var num = 456;
}

Værdien af variablen num har vi altså nu gjort afhængig af, om minBox er valgt eller ej.

Nu vil jeg mene, du burde kunne stave dig igennem koden med mine kommentarer. Ellers må du bare spørge videre  =)

<script type="text/javascript">
function num, decplaces) {
    // num afrundes til decplaces antal decimaler - og returneres
    return num.toFixed(decplaces);
}

function Totalise() {
    // Opret en variabel, indeholdende en reference
    // til dokumentets første form
    var frm = document.forms[0];
   
    if (frm.Værelse1.checked) {
        frm.Værelse1_Pris.value = 250.00;
    } else {
        frm.Værelse1_Pris.value = 0.00;
    }
   
    if (frm.Værelse2.checked) {
        frm.Værelse2_Pris.value = 500.00;
    } else {
        frm.Værelse2_Pris.value = 0.00;
    }
   
    if (frm.Overnatning1.checked) {
        frm.Overnatning1.value = 1.00;
    } else {
        frm.Overnatning1.value = 1.00;
    }
   
    if (frm.Overnatning2.checked) {
        frm.Overnatning2.value = 2.00;
    } else {
        frm.Overnatning2.value = 1.00;
    }
   
    if (frm.Morgenmad.checked) {
        frm.Morgenmadspris.value = 50.00;
    } else {
        frm.Morgenmadspris.value = 0.00;
    }
   
    if (frm.Person1.checked) {
        frm.Person1.value = 1.00;
    } else {
        frm.Person1.value = 1.00;
    }
   
    if (frm.Person2.checked) {
        frm.Person2.value = 0.50;
    } else {
        frm.Person2.value = 1.00;
    }
       
    if (frm.Person3.checked) {
        frm.Person3.value = 0.33;
    } else {
        frm.Person3.value = 1.00;
    }
       
    if (frm.Person4.checked) {
        frm.Person4.value = 0.25;
    } else {
        frm.Person4.value = 1.00;
    }
   
    // Læg værdierne for felterne Værelse1_Pris, frm.Værelse2_Pris og Morgenmadspris sammen
    // og gang resultatet med værdierne for Overnatning1 og Overnatning2.
    // Opret en variabel, Sum - og læg det endelige resultat i denne variabel
    var Sum = (parseFloat(frm.Værelse1_Pris.value) + parseFloat(frm.Værelse2_Pris.value) + parseFloat(frm.Morgenmadspris.value)) * parseFloat(frm.Overnatning1.value) * parseFloat(frm.Overnatning2.value);
   
    // Sæt feltet Total's værdi til resultatet Sum - afrundet til to decimaler
    frm.Total.value = format(Sum, 2);
   
    // Gang tallet Sum med værdierne af felterne Person1, Person2, Person3 og Person4
    // - og læg resultatet i en ny variabel Sum2
    var Sum2 = Sum * parseFloat(frm.Person1.value) * parseFloat(frm.Person2.value) * parseFloat(frm.Person3.value) * parseFloat(frm.Person4.value);
   
    // Sæt feltet PrisPrPerson's værdi til resultatet Sum2 - afrundet til to decimaler
    frm.PrisPrPerson.value = format(Sum2, 2);
}
</script>

Læg i øvrigt mærke til, at language attributten på JavaScript tagget ikke længere bruges, men er erstattet af type="text/javascript". Og ja, det er et HTML-tag  *o)

Jeg håber også, du kan se, min kode er langt mere overskuelig, end den oprindelige. 'Tuborg' parenteserne står over hindanden, og det der skal afvikles - blokken imellem - er rykket pænt ind. Al indhold i de to funktioner er ligeledes rykket ind for at gøre overskueligt, hvad der hører til i den enkelte funktion.
Avatar billede mabiom92 Nybegynder
27. januar 2012 - 08:24 #4
Siger mange tak for forklaringen, prøvede at hænge på med forkortelserne da jeg læste det, men må indrømme at jeg skulle læse det 1 gang eller 2 mere ;-)

Men, den kode du har sat ind i kommentaren ovenfor virker ikke hos mig, desværre. Tror det mangler noget :-)
Avatar billede olebole Juniormester
27. januar 2012 - 13:16 #5
Selvtak, og jeg er godt klar over, koden desværre ikke fungerer. Jeg opdagede en mangel, lige da jeg havde posted - men da var Eksperten lige ved at gå i det natlige update mode, og jeg kunne ikke komme til at poste en rettelse. Jeg glemte at kalde funktionen - og så kan den jo være nok så fin!  :D

Denne (røde) linje skal tilføjes helt til slut:

}
Totalise();
</script>

- så skulle det gerne virke. Det er dog ganske utestet, da jeg ikke har HTML'en at teste mod.

Jeg ved godt, at jeg også skylder en forklaring på forskellen mellem en funktion og en metode, men den skriver jeg nok i aften. Du har sikkert også haft rigeligt at læse på  *o)
Avatar billede mabiom92 Nybegynder
27. januar 2012 - 15:00 #6
Jeg takker rigtig mange gange :-)
Ja, har lidt at læse op på - men glæder mig til du skriver lidt mere i aften :-)
Avatar billede mabiom92 Nybegynder
30. januar 2012 - 11:06 #7
Bliver det til noget? :-D
Avatar billede mabiom92 Nybegynder
20. marts 2012 - 08:58 #8
Tak! Men vil du skrive mere? :-)
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