Avatar billede chr.kj Nybegynder
23. oktober 2008 - 09:31 Der er 25 kommentarer og
1 løsning

Problemer med en beregningsform

Hejsa.

Jeg har problemer med at få nedenstående form til at virke efter hensigten.

Jeg har fundet ud af at fejlen der kommer er: a.value er nulle eller ikke et objekt

Selve formen virker korrekt og efter hensigten når jeg "bare" smider den ind på en side, men når jeg vil integrere den på en eksisterende side kommer pvenstående fejl.

Selve formen ser sådan ud:

<form method="GET" onsubmit="return calc();">
<table width="100%" border="0" cellpadding="0" cellspacing="0">
<tr>
<td>Investeringsbeløb:</td>
<td style="text-align:right;"><select name="a" size="1">
<option>Vælg beløb...</option>
<option value="400000">400.000 kr.</option>
<option value="600000">600.000 kr.</option>
<option value="800000">800.000 kr.</option>
<option value="1000000">1.000.000 kr.</option>
<option value="1200000">1.200.000 kr.</option>
<option value="1400000">1.400.000 kr.</option>
</select></td>
</tr>
<tr>
<td>Investeringshorisont:</td>
<td style="text-align:right;"><select name="b" size="1">
<option>Vælg antal år...</option>
<option value="10">10 år</option>
<option value="11">11 år</option>
<option value="12">12 år</option>
<option value="13">13 år</option>
<option value="14">14 år</option>
<option value="15">15 år</option>
</select></td>
</tr>
</table>
<div style="margin:10px 0;"></div>
<table width="100%" border="0" cellpadding="0" cellspacing="0">
<tr valign="bottom">
<td style="padding-top:10px;border-top:1px solid #CCCCCC;">Udbytte over investeringshorisonten:</td>
<td id="out_1" style="padding-top:10px;border-top:1px solid #CCCCCC;"></td>
</tr>
<tr valign="bottom">
<td>Forventet kursgevinst:</td>
<td id="out_2"></td>
</tr>
<tr valign="bottom">
<td style="padding-bottom:10px;">Samlet fortjeneste:</td>
<td style="padding-bottom:10px;" id="out_3"></td>
</tr>
<tr>
<td style="border-top:1px solid #CCCCCC;padding-top:10px;">Beregningerne er vejledende.</td>
<td style="border-top:1px solid #CCCCCC;padding-top:5px;" align="right"><input type="image" src="_img/btn_beregn.gif" /></td>
</tr>
</table>
</form>

og min calc.js ser sådan ud:


    function calc(){
        var f = document.forms[0];
        var a = parseInt(f.a.value);
        var b = parseInt(f.b.value);
        if (isNaN(a)||isNaN(b)) return false;
       
        var a_o = (a/100)*5*b;
        var b_o = (a/100)*5.3*b;
        document.getElementById("out_1").innerHTML = addCommas(a_o)+" kr.";
        document.getElementById("out_2").innerHTML = addCommas(b_o)+" kr.";
        document.getElementById("out_3").innerHTML = addCommas(a_o+b_o)+" kr.";
        return false;
    }
   
    function addCommas(nStr)
    {
        nStr += '';
        x = nStr.split(',');
        x1 = x[0];
        x2 = x.length > 1 ? ',' + x[1] : '';
        var rgx = /(\d+)(\d{3})/;
        while (rgx.test(x1)) {
            x1 = x1.replace(rgx, '$1' + '.' + '$2');
        }
        return x1 + x2;
    }

Håber der er en der kan hjælpe med at få det til at virke.
Avatar billede majbom Novice
23. oktober 2008 - 09:52 #1
prøv med:

a.options[a.selectedIndex].value

i stedet for:

a.value
Avatar billede chr.kj Nybegynder
23. oktober 2008 - 11:22 #2
altså smide det ind i min calc.js fil således, at under function calc() kommer der til at stå

var a = parseInt(f.a.options[a.selectedIndex].value);
var b = parseInt(f.b.options[b.selectedIndex].value);

i stedet for

var a = parseInt(f.a.value);
var b = parseInt(f.b.value);

Er det det du mener?
Avatar billede majbom Novice
23. oktober 2008 - 11:30 #3
præcis :)
Avatar billede erikjacobsen Ekspert
23. oktober 2008 - 11:36 #4
Umiddelbart er der ikke noget galt i den kode du viser her: http://n0p.com/850046.php
Avatar billede majbom Novice
23. oktober 2008 - 11:48 #5
-> erik - nej der virker den fint nok

jeg har bare engang haft samme problem og fandt ud af at man skulle bruge a.options[a.selectedIndex].value (så har faktisk altid brugt det, da jeg gik ud fra at a.value slet ikke var gyldig/virkede)
Avatar billede erikjacobsen Ekspert
23. oktober 2008 - 12:02 #6
Det virkede ikke i Netscape 4.5, så trods alt rigtigere at bruge din version ;)  Men det er næppe problemet for spørgeren. Mon spørgeren har mere end een <form> på sin side?
Avatar billede chr.kj Nybegynder
23. oktober 2008 - 12:14 #7
Det virker desværre ikke.

Som jeg har skrevet virker det egentlig fint nok på en "stand-alone" side, men i det øjeblik jeg smider den ind på en anden siden vil den ikke beregne :/

I stedet for at tallene kommer i de felter som i det eksempel som erik har smidt op vises de i adresse linjen som f.eks.: index.asp?a=800000&b=14&x=14&y=15
Avatar billede majbom Novice
23. oktober 2008 - 12:34 #8
kunne godt lyde som om at du har flere mere end den ene form på din side.

du kan evt. prøve at få fat i elementernes værdi ved at bruge document.getElementById().value i stedet for form.element.value
Avatar billede erikjacobsen Ekspert
23. oktober 2008 - 12:50 #9
Det sidste kan man nu kun hvis elementerne har en id - det har de ikke i spørgerens eksempel. Vi kan sikkert hjælpe dig, hvis vi kan se hvor det går galt.
Avatar billede chr.kj Nybegynder
23. oktober 2008 - 13:00 #10
Ja. jeg har faktisk en anden form på siden (en login box) - er det derfor det går galt?
Kan man ikke navngive sig ud af det, eller skal det noget helt andet til?
Avatar billede erikjacobsen Ekspert
23. oktober 2008 - 13:25 #11
Så er din form nok ikke nummer 0 -vel ;)

Du skal

1)

<form method="GET" onsubmit="return calc(this.form);">

2)

    function calc(f){
        var a = parseInt(f.a.value);
        var b = parseInt(f.b.value);
Avatar billede erikjacobsen Ekspert
23. oktober 2008 - 13:26 #12
Ok 1)-eren kan bare være

<form method="GET" onsubmit="return calc(this);">
Avatar billede majbom Novice
23. oktober 2008 - 13:26 #13
vis login formen er den eneste du har udover denne form, burde du kunne klare dig med at rette

var f = document.forms[0];

til

var f = document.forms[1];
Avatar billede majbom Novice
23. oktober 2008 - 13:27 #14
ja, muligheder er der jo nok af :)
Avatar billede chr.kj Nybegynder
23. oktober 2008 - 13:36 #15
Ahh.. I er mine guder :D

Takker for hjælpen.

Smider I lige et svar så jeg kan dele pointene mellem jer :D
Avatar billede majbom Novice
23. oktober 2008 - 13:45 #16
velbekomme...

hvilken løsning endte du med så?
Avatar billede chr.kj Nybegynder
23. oktober 2008 - 14:40 #17
Jeg endte faktisk med at bruge den du viste med var f = document.forms[1]; :)

Jeg venter lige på svar fra erik inden jeg kan give point.

Takker igen :)
Avatar billede erikjacobsen Ekspert
23. oktober 2008 - 16:04 #18
Jeg samler slet ikke på point, tak. Min "løsning" er lidt fremtidssikret ... ;)
Avatar billede roenving Novice
23. oktober 2008 - 16:35 #19
-- men det er absolut _meget_ bedre at bruge eriks version, så vil du ikke være afhængig af, at du skal rette dit script senere, hvis du vælger at slette den anden formular eller sætter endnu en ind !-)
Avatar billede majbom Novice
23. oktober 2008 - 19:23 #20
lige præcis, jeg ville også gå efter eriks løsning, da den anden er afhængig af at der er en og kun én form før den aktuelle.

min løsning var blot nemmest at forsøge med, for at se om det var dér problemet lå :)
Avatar billede chr.kj Nybegynder
24. oktober 2008 - 08:26 #21
OK.. Så tror jeg at jeg vil se efter om jeg ikke kan få eriks eksempel til at virke :)

Takker for hjælpen endnu engang.
Avatar billede majbom Novice
24. oktober 2008 - 09:04 #22
selv tak, og tak for points :0)

go' weekend
Avatar billede chr.kj Nybegynder
24. oktober 2008 - 10:01 #23
Hmm.. Hvis jeg skriver som erik foreslår

<form method="GET" onsubmit="return calc(this.form);">

function calc(f){
        var a = parseInt(f.a.value);
        var b = parseInt(f.b.value);

Kommer samme fejl som tidligere? Hvad gør jeg forkert?
Avatar billede roenving Novice
24. oktober 2008 - 10:10 #24
-- du har overset eriks rettelse:

<form method="GET" onsubmit="return calc(this);">
Avatar billede chr.kj Nybegynder
27. oktober 2008 - 15:34 #25
Ah.. Ok.. Takker :D
Avatar billede erikjacobsen Ekspert
27. oktober 2008 - 15:47 #26
Og jeg fik da også skrevet helt forkert. Jeg vil gerne rette "Ok 1)-eren kan bare være" til "Ok 1)-eren SKAL bare være"
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