Avatar billede Slettet bruger
04. august 2004 - 11:25 Der er 16 kommentarer og
1 løsning

Validering af talfelt

Jeg har en ASP formular hvor jeg gerne vil have et felt valideret, således at det kun må indeholde tal. Feltet må gerne efterlades tomt, det er kun hvis det bliver udfyldt at det skal være tal. Feltet skal også kunne udfyldes med decimaltal f.eks 2,5. Kan det lade sig gøre ?
Avatar billede roenving Novice
04. august 2004 - 12:25 #1
Skal det også valideres for . i tallet ?-)

function validerTal(flt){
  if(!/^$|^\d+([,\.]\d+)?$/.test(flt.value)){
    alert(flt.name + " må kun indeholde et tal eller være tomt !-)");
    flt.select();
    flt.focus();
    return false;
  }
  return true;
}

-- hvis du så kalder det fra f.eks. onchange på feltet sådan:

<input type="text" name="pris" onchange="validerTal(this);">
Avatar billede Slettet bruger
04. august 2004 - 12:27 #2
Ja, der må ikke kunne skrives f.eks. 2.5 kun 2,5
Avatar billede roenving Novice
04. august 2004 - 12:30 #3
if(!/^$|^\d+(,\d+)?$/.test(flt.value)){
Avatar billede Slettet bruger
04. august 2004 - 12:48 #4
Jeg kan ikke få det til at virke. Koden ser nu sådan ud:
<script type="text/javascript">
function validerTal(li){
if(!/^$|^\d+(,\d+)?$/.test(li.value)){
    alert(li.name + " må kun indeholde et tal eller være tomt !-)");
    li.select();
    li.focus();
    return false;
  }
  return true;
}


</script>
Er det det forkerte sted jeg har ændret navnet til det felt der skal valideres ?
Den sender formularen OK , men cheker ikke om det er tal i feltet
Avatar billede Slettet bruger
04. august 2004 - 13:11 #5
Nu virker valideringen. Koden ser sådan ud:
<script type="text/javascript">
function validerTal(flt){
  if(!/^$|^\d+(,\d+)?$/.test(flt.value)){
    alert(flt.LI + " må kun indeholde et tal eller være tomt !-)");
    flt.select();
    flt.focus();
    return false;
  }
  return true;
}


</script>
Men nu får jeg alert boxen uanset om feltet er tomt eller med tal/tekst ?
Jeg har ændret onchange til onsubmit ?
Avatar billede Slettet bruger
04. august 2004 - 13:12 #6
Det er tilsyneladende denne linie
flt.select();
Avatar billede roenving Novice
04. august 2004 - 13:34 #7
Hvordan ser kaldet ud ?-)
Avatar billede Slettet bruger
04. august 2004 - 13:41 #8
Hele koden ser sådan ud:
<script type="text/javascript">
function validerTal(flt){
  if(!/^$|^\d+(,\d+)?$/.test(flt.value)){
    alert(flt.LI + " må kun indeholde et tal eller være tomt !-)");
    flt.select();
    flt.focus();
    return false;
  }
  return true;
}


</script>

<html>

<head>
<title>Test</title>

</head>

<body>


<form METHOD="POST" action="be.asp" onsubmit="validerTal(this);">
  <table border="0" width="560" height="191">
    <tr>
      <td width="412" height="1" valign="top" colspan="2"><strong>Opgørelse<br>
     
      </td>
    </tr>
    <tr>
      <td width="98" height="1" valign="top" bgcolor="#EFEFEF">LI</td>
      <td width="314" height="1" valign="top" bgcolor="#EFEFEF"><input type="text" name="li" size="14" maxlength="8"><br>
      Skriv venligst  <strong>uden</strong> mellemrum. Eks.6666</td>
    </tr>
    <tr>
      <td width="98" height="1" valign="top">Navn </td>
   
    </tr>
   
    <tr>
      <td ALIGN="left" width="562" height="23" colspan="2"><table border="0" cellpadding="0"
      cellspacing="0" width="560">
        <tr>
          <td><input type="text" name="en" size="6" value="test"
          style="background-color: rgb(255,255,255); color: rgb(255,255,255); border: medium none rgb(255,255,255)"><input
          type="text" name="Afsendt" size="10" value="<%=Date()%>"
          style="color: rgb(255,255,255); border: medium none"></td>
        </tr>
      </table>
      </td>
    </tr>
  </table>
  <p>&nbsp; </p>
</form>

<p align="right">&nbsp;</p>
</body>
</html>
Avatar billede roenving Novice
04. august 2004 - 13:47 #9
<script type="text/javascript">
function validerTal(f){
  if(!/^$|^\d+(,\d+)?$/.test(f.li.value)){
    alert("LI må kun indeholde et tal eller være tomt !-)");
    f.li.select();
    f.li.focus();
    return false;
  }
  return true;
}
</script>

-- og så skal en onsubmit typisk stoppe submit ved fejl, og det gøres sådan:

<form METHOD="POST" action="be.asp" onsubmit="return validerTal(this);">
Avatar billede Slettet bruger
04. august 2004 - 13:54 #10
Helt perfekt. Tusind tak. Læg et svar, så får du dine velfortjente point.
Linda
Avatar billede roenving Novice
04. august 2004 - 14:03 #11
Velbekomme '-)
Avatar billede roenving Novice
04. august 2004 - 14:23 #12
-- og tak for point ;~}
Avatar billede Slettet bruger
04. august 2004 - 15:23 #13
Jeg har lige et lille problem mere hvis du stadig er der. Jeg har flere felter jeg gerne vil have valideret på samme måde, kan man ikke gentage koden, bare med et andet feltnavn ?
Avatar billede roenving Novice
04. august 2004 - 15:33 #14
Nemmest vil være dette:

function valider(f){
  if(!validerTal(f.li)){
    return false;
  }
  if(!validerTal(f.li2)){
    return false;
  }
  if(!validerTal(f.li3)){
    return false;
  }
  if(!validerTal(f.li4)){
    return false;
  }
  return true;
}

-- og så sætte validerTal tilbage:

function validerTal(flt){
if(!/^$|^\d+(,\d+)?$/.test(flt.value)){
    alert(flt.name + " må kun indeholde et tal eller være tomt !-)");
    flt.select();
    flt.focus();
    return false;
  }
  return true;
}
Avatar billede Slettet bruger
04. august 2004 - 15:41 #15
Perfekt. Endnu en gang tak. Nu tror jeg jeg har fattet det.
Avatar billede roenving Novice
04. august 2004 - 15:52 #16
Bueno, du fik også lavet onsubmitten om til at kalde valider i stedet for validerTal !-)
Avatar billede Slettet bruger
04. august 2004 - 15:59 #17
Yes, det gjorde jeg og det virker fint
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