Avatar billede kado Nybegynder
17. juni 2003 - 14:02 Der er 8 kommentarer og
1 løsning

Hvordan kan jeg undgå NaN

Jeg har et lille javascript, der udregner enkelte felter. Det skyldes formentligt, at jeg har flyttet scriptet fra en form, hvor det virkede. Men hvad skal der ændres i scriptet.
Her er både felterne og scriptet:

<td><script type="text/javascript" language="JavaScript"><!--
function beregn( frmObj ) {
var t1 = parseInt( ""+frmObj.Produkt.value, 10 );
var t2 = parseInt( ""+frmObj.Antal.value);
var t3 = parseInt( ""+frmObj.Gebyr.value);
frmObj.Pris.value = (t2 * t1);
frmObj.Total.value = ((t2 * t1) + t3);
}; //end beregn( HTML form objekt )
// --></script>
                                <table width="100%" cellspacing="0"
  cellpadding="0" height="42">
                                    <tr>
                                        <td class="fedbrodtekst1" width="60" align="left">Produkt</td>
                                        <td class="fedbrodtekst1" align="left" width="116"><select name="Produkt" value onblur="beregn(this.form);"
      class="but" size="1">
                                                <option value="Billetter">Billetter</option>
                                            </select></td>
                                    </tr>
                                    <tr align="center">
                                        <td class="fedbrodtekst1" width="60" align="left">Antal</td>
                                        <td class="fedbrodtekst1" align="left" width="116"><input name="Antal" value tabindex="11" onblur="beregn(this.form);"      type="text" class="fedbrodtekst1" size="5" maxlength="4">Stk.</td>
                                    </tr>
                                    <tr align="center">
                                        <td class="fedbrodtekst1" width="60" align="left">Pris</td>
                                        <td class="fedbrodtekst1" align="left" width="116"><input name="Pris" value="0" readonly onfocus="this.blur();" type="text"
      class="brodtekst" size="5" maxlength="5">Kr. <span class="brodtekstred">excl. gebyr</span></td>
                                    </tr>
                                    <tr align="center">
                                        <td class="fedbrodtekst1" width="60" align="left">Gebyr</td>
                                        <td class="fedbrodtekst1" align="left" width="116"><input class="brodtekst" name="Gebyr" value="15" readonly onfocus="this.blur();" type="text"
      size="5" maxlength="5">Kr.</td>
                                    </tr>
                                    <tr align="center">
                                        <td class="fedbrodtekst1" width="60" align="left">Totalpris</td>
                                        <td class="fedbrodtekst1" align="left" width="116"><input name="Total" value="0" readonly onfocus="this.blur();" type="text"
      class="fedbrodtekst1" size="5" maxlength="5">Kr. incl. gebyr</td>
                                    </tr>
                                </table></td>

/kado
Avatar billede skovenborg Nybegynder
17. juni 2003 - 14:09 #1
Du skal validere dem:
function beregn( frmObj ) {
var t1 = parseInt(""+frmObj.Produkt.value, 10 );
var t2 = parseInt( ""+frmObj.Antal.value);
var t3 = parseInt( ""+frmObj.Gebyr.value);
if (t1 == TRUE && t2 == TRUE && t3 == TRUE)
{
frmObj.Pris.value = (t2 * t1);
frmObj.Total.value = ((t2 * t1) + t3);
}
else //en eller anden form for warning
Avatar billede skovenborg Nybegynder
17. juni 2003 - 14:32 #2
hvorfor siger du i grunden parseInt(""+frmObj.Produkt.value,10)???

Ud fra formen bliver det jo en streng, ikke et tal. Hvis det skal være det index den har skal du skrive:
frmObj.Produkt.selectedIndex
Avatar billede kado Nybegynder
17. juni 2003 - 14:38 #3
Hej skovenborg.
Kan jeg få dig til at paste hele scriptet, for jeg er ikke en haj til det

/kado
Avatar billede kado Nybegynder
17. juni 2003 - 14:43 #4
Jeg kan slet ikke få dit script til at virke, der sker intet.

Men jeg havde en fejl i mit eget, nemlig valueværdien for Billetter, skulle være et beløb istedet for ordet Billetter, så virker det.
Men det vil selvfølgelig være godt, hvis der kunne komme en advarsel, hvis køberen ikke nøjes med at skrive tal i feltet Antal.

/kado
Avatar billede skovenborg Nybegynder
17. juni 2003 - 14:54 #5
Okay, så kan jeg bedre forstå det.
Prøv det her:
<script type="text/javascript" language="JavaScript"><!--
function beregn( frmObj ) {
var t1 = (frmObj.Produkt.value) ? parseInt( ""+frmObj.Produkt[frmObj.Produkt.selectedIndex].value, 10 ) : "";
var t2 = (frmObj.Antal.value) ? parseInt( ""+frmObj.Antal.value) : "";
var t3 = parseInt( ""+frmObj.Gebyr.value);
if (t1 && t2 && t3)
{
frmObj.Pris.value = (t2 * t1);
frmObj.Total.value = ((t2 * t1) + t3);
}
else alert("Udfyld felterne korrekt");
}; //end beregn( HTML form objekt )
// --></script>
Avatar billede skovenborg Nybegynder
17. juni 2003 - 14:56 #6
Glemte nemlig helt at frmObj.Produkt.value ikke giver noget resultat da Produkt er et array (da det er en select-box du bruger). Desuden kunne man af en eller anden grund ikke skrive t1 == true, men det nok fordi jeg er blevet for vant til PHP :=)
Avatar billede kado Nybegynder
17. juni 2003 - 15:12 #7
skovenborg, du er en guttermand.
Send et svar, så jeg kan give dig pointene

TAK
/kado
Avatar billede skovenborg Nybegynder
17. juni 2003 - 15:53 #8
Ih tak - rart at hjælpe :-)
Avatar billede pillpopper Nybegynder
19. november 2003 - 13:45 #9
Hej Kado jeg ved ikke om du har læse eller modtaget den besked jeg skrev men hvis du skriver til mig så vil jeg give dig 20 point for dit svar hvor det hører til henne..
Jeg undskylder meget mit svar til dig men jeg viste ikke at jeg selv skulde give pointene væk da det var mit første besøg på siden (slvom det IKKE er nogen undskyldning)..'
M.v.h- Pillpopper
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