Avatar billede grafikeren Nybegynder
29. februar 2004 - 15:48 Der er 15 kommentarer og
1 løsning

Lav validate_fields() sætning

Hej

Jeg har en form, som jeg gerne vil ha' kodet en java script "validate" sætning til. Altså hvor den tjekker nogle forskellige ting i de forskellige felter.

Jeg kan ikke særlig meget JavaScript, og har ikke tid til at sætte mig ind i det nu.

Opgaven:
Validate følgende felter (her har jeg skrevet hvad de skal være lig med):

felt1 = (1 til 10)
felt2 = (1 til 10)
felt3 = (1 til 10)
felt4 = (1 til 10)
felt5 = (1 til 10)
kommentar = (over 30 tegn)

Ellers skal den bare komme med en pop up. Er der nogen, som er friske på denne lille opgave?
Avatar billede roenving Novice
29. februar 2004 - 16:00 #1
<script type="text/javascript">
function validate(f){
  for(i=1;i<6;i++){
    fld = f.elements['felt'+i];
    if(+fld.value.match>10||+fld.value.match<1){
      alert('Felt'+i+' skal have en værdi mellem 1 og 10');
      return false;
  }
  if(f.kommentar.value.length<30){
    alert('Kommentaren skal være længere end 30 tegn');
    return false;
  }
  return true;
}
</script>


<form ... onsubmit="return validate(this)">

-- og 120 points er meget mere, end sværhedsgraden betinger !-)
Avatar billede roenving Novice
29. februar 2004 - 16:01 #2
Hov,

    if(+fld.value>10||+fld.value<1){
Avatar billede grafikeren Nybegynder
29. februar 2004 - 16:02 #3
Troede det var svært... Men åbenbart ikke for dig! :-)

Tjekker lige scriptet
Avatar billede roenving Novice
29. februar 2004 - 16:06 #4
Og jeg testede også lige, så jeg fandt en fejl, jeg troede jeg havde undgået !-)

<script type="text/javascript">
function validate(f){
  for(i=1;i<6;i++){
    fld = f.elements['felt'+i];
    if(+fld.value>10||+fld.value<1){
      alert('Felt'+i+' skal have en værdi mellem 1 og 10');
      return false;
    }
  }
  if(f.kommentar.value.length<30){
    alert('Kommentaren skal være længere end 30 tegn');
    return false;
  }
  return true;
}
</script>


<form ... onsubmit="return validate(this)">
Felt1: <input name="felt1" type="text"><br>
Felt2: <input name="felt2" type="text"><br>
Felt3: <input name="felt3" type="text"><br>
Felt4: <input name="felt4" type="text"><br>
Felt5: <input name="felt5" type="text"><br>
Kommentar:
<textarea name="kommentar"></textarea>
<input type="submit">
</form>
Avatar billede grafikeren Nybegynder
29. februar 2004 - 16:19 #5
Det virker jo super. Hvordan kan jeg så kalde de forskellige felter noget, når den melder tilbage i alert().

Fx felt1 = Navn

Kan du lave en undtagelse, som siger, at hvis "felt = Q" så skal den springes over. Dvs. at den ikke skal tjekkes for, om den er mellem 1 og 10.
Avatar billede grafikeren Nybegynder
29. februar 2004 - 16:23 #6
Felt1-5 må forresten også kun være tal.
Avatar billede roenving Novice
29. februar 2004 - 16:24 #7
Lige her har jeg lavet en løkke, fordi du havde navngivet dine felter med felt1-5, men normalt ville man jo nok enten skrive alle felter et ad gangen og så sætte svaret på hver, eller lave en general-checker, hvor den bare checkede alle felter for indhold, og så lige havde noget ekstra, hvis felterne var specielle ...

Men dit check var så specielt, at jeg ikke gad tage udgangspunkt i noget jag havde i forvejen -- det var lige så let at starte forfra ...
Avatar billede roenving Novice
29. februar 2004 - 16:25 #8
Heltal ?-)
Avatar billede grafikeren Nybegynder
29. februar 2004 - 16:26 #9
Kan man ikke bare kalde felterne noget i selve java scriptet?
Avatar billede grafikeren Nybegynder
29. februar 2004 - 16:26 #10
Heltal.
Avatar billede grafikeren Nybegynder
29. februar 2004 - 16:27 #11
Det med "felt = Q", det er altså bare at hvis et felt (felt1-5) får værdien Q, så er det ok.

Så man kan vel sige at et felt (felt1-5) kun må ha' værdien "1-10" og "Q"
Avatar billede roenving Novice
29. februar 2004 - 16:28 #12
Oki !-)

-- øjeblik ...
Avatar billede roenving Novice
29. februar 2004 - 16:32 #13
<script type="text/javascript">
function validate(f){
  var reg = /^(Q|10|[1-9])$/;
  var fields = ['Navn','Adresse','Felt3','Felt4','Felt5']
  for(i=1;6>i;i++){
    fld = f.elements['felt'+i];
    if(!fld.value.match(reg)){
      alert(fields[i-1]+' skal have en værdi mellem 1 og 10');
      return false;
    }
  }
  if(f.kommentar.value.length<30){
    alert('Kommentaren skal være længere end 30 tegn');
    return false;
  }
  return true;
}
</script>


<form ... onsubmit="return validate(this)">
Navn: <input name="felt1" type="text"><br>
Adresse: <input name="felt2" type="text"><br>
Felt3: <input name="felt3" type="text"><br>
Felt4: <input name="felt4" type="text"><br>
Felt5: <input name="felt5" type="text"><br>
Kommentar:
<textarea name="kommentar"></textarea>
<input type="submit">
</form>
Avatar billede grafikeren Nybegynder
29. februar 2004 - 16:39 #14
Perfekt. Du fortjener alle point, selvom det måske er i overkanten!

Læg et svar.
Avatar billede roenving Novice
29. februar 2004 - 16:45 #15
Velbekomme '-)
Avatar billede roenving Novice
29. februar 2004 - 16:51 #16
-- og tak for points ;~}
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