Avatar billede daddy Novice
05. december 2004 - 18:07 Der er 8 kommentarer og
1 løsning

Validering af radio knapper

Jeg har en form med nogle radio knapper og et tekstfelt. Jeg skal have det valideret, så der tjekkes for indhold.

Jeg har dette javascript, som tjekker for indhold i den første række radioknapper. Men vil gerne havde det udvidet til tjekke alle rækker(13) og tekstfeldet.

function validering()
  {
  error = 0;
  if(!((document.forms[0].kamp1[0].checked) 
    || (document.forms[0].kamp1[1].checked) 
    || (document.forms[0].kamp1[2].checked)) && (error==0)) 
  {       
    alert('Du har ikke udfyldt kamp 1!');
    error = 1;       
  }           

  if(error == 0)
  document.forms[0].submit();   
  }

Formularen ser sådan her ud:

<form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="post" onsubmit="validering();return false;">

<input type="radio" name="kamp1" value="1-1">
<input type="radio" name="kamp1" value="1-x">
<input type="radio" name="kamp1" value="1-2">

<input type="radio" name="kamp2" value="2-1">
<input type="radio" name="kamp2" value="2-x">
<input type="radio" name="kamp2" value="2-2">

<input type="radio" name="kamp3" value="3-1">
<input type="radio" name="kamp3" value="3-x">
<input type="radio" name="kamp3" value="3-2">

osv

<input type="text" name="user" size="10" maxlength="20">

<input type="submit" value="Indsend">
</form>

Hvordan gør jeg det?
Avatar billede skovenborg Nybegynder
05. december 2004 - 18:41 #1
Prøv:
<script type="text/javascript">
var antal_raekker = 3;
var raekke_navn = "kamp";
function validering(frm) {
    var error = 0;
    for (i=1;i<=antal_raekker;i++) {
        r = frm.elements[raekke_navn+i];
        found_checked = false;
        for (j=0;j<r.length;j++) {
            if (r[j].checked) {found_checked = true;}
        }
        if (!found_checked) {error = 1;alert("Du har ikke udfyldt række nr. "+i);break;}
    }
    if (!error) {
        frm.submit();
    }
}
</script>

<form>
<input type="radio" name="kamp1" value="1-1">
<input type="radio" name="kamp1" value="1-x">
<input type="radio" name="kamp1" value="1-2">

<input type="radio" name="kamp2" value="2-1">
<input type="radio" name="kamp2" value="2-x">
<input type="radio" name="kamp2" value="2-2">

<input type="radio" name="kamp3" value="3-1">
<input type="radio" name="kamp3" value="3-x">
<input type="radio" name="kamp3" value="3-2">
<input type="button" onclick="validering(this.form);" />
</form>
Avatar billede daddy Novice
05. december 2004 - 20:55 #2
Det virker perfekt.

Kunne jeg lokke dig til at vikle et teskstfelt ind i det også?

Jeg har prøvet med den metode jeg kender, men det ødelægger det du har lavet.
Avatar billede skovenborg Nybegynder
05. december 2004 - 21:23 #3
Joda :-)
<script type="text/javascript">
var antal_raekker = 3;
var raekke_navn = "kamp";
function validering(frm) {
    var error = 0;
    for (i=1;i<=antal_raekker;i++) {
        r = frm.elements[raekke_navn+i];
        found_checked = false;
        for (j=0;j<r.length;j++) {
            if (r[j].checked) {found_checked = true;}
        }
        if (!found_checked) {error = 1;alert("Du har ikke udfyldt række nr. "+i);break;}
    }
   
    if (frm.tekstfelt.value.search(/[^\s]/ig) == -1) {alert("Du skal udfylde tekstfeltet.");error = 1;}
    if (!error) {
        frm.submit();
    }
}
</script>

<form>
<input type="text" name="tekstfelt" />
<input type="radio" name="kamp1" value="1-1">

Smider lige et svar imens :-)
Avatar billede skovenborg Nybegynder
05. december 2004 - 21:25 #4
skal måske lige nævnes at:
if (frm.tekstfelt.value.search(/[^\s]/ig) == -1)
tester om der er skrevet andet end mellemrum og den slags (\s betyder whitespace). Man kunne også have skrevet:
if (frm.tekstfelt.value.search(/[\S]/ig) == -1)
som gør det samme, men måske lidt pænere at se på. \S betyder alt andet end whitespace
Avatar billede daddy Novice
05. december 2004 - 21:30 #5
Cool tak

Hvis du lynhurtigt kan lave så alerten til tekstboksen ikke bliver vist når der er er kommet en allert på en af radio knapperne, så ville det være lækkert.

Men ikke noget du behøver bøvl med, for det virker jo ellers efter hensigten.

Man tak :-)
Avatar billede skovenborg Nybegynder
05. december 2004 - 21:33 #6
if (error && frm.tekstfelt.value.search(/[^\s]/ig) == -1) {alert("Du skal udfylde tekstfeltet.");error = 1;}
så tester den bare om der er fundet fejl før, for så er der jo ingen grund til at teste tekstfeltet.
Avatar billede skovenborg Nybegynder
05. december 2004 - 21:35 #7
undskyld der skulle stå:
if (!error && frm.tekstfelt.value.search(/[^\s]/ig) == -1) {alert("Du skal udfylde tekstfeltet.");error = 1;}
Avatar billede daddy Novice
05. december 2004 - 21:38 #8
Det er bare fjong :-D

Jeg takker endnu en gang
Avatar billede skovenborg Nybegynder
05. december 2004 - 22:10 #9
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