Avatar billede entracore Nybegynder
18. februar 2002 - 23:33 Der er 3 kommentarer og
1 løsning

Validering af formfelter

Jeg er kørt en smule fast her.
Min forklaring er måske nok en smule snørklet. Jeg vil prøve at gøre det så forståligt som muligt,
men hvis i ikke fatter en skide - så råb endelig op

Mit problem er at jeg vil validere en form for tomme felter i Javascript funktion.
Min funktion løber alle formfelter igennem for at lede efter tomme felter.
Jeg har dog mulighed for at fravælge felter fra som jeg ikke ønsker at sortere på.
Dette gør jeg ved at angive et id i det enkelte formular felt

f.eks.: id="[s:-+]" betyder at formfeltet skal valideres.

For at gøre min formfelt validering så fleksibel som mulig har jeg ligeledes tilføjet
et andet id. Dette kunne f.eks. være: [i:1]
Dette id identificere formfeltet. Hvis der er to formfelter med de samme id'er er det kun
nødvendigt at udfylde den ene,

i Nedenstående eksempel er det kun nødvendigt at afkrydse den ene checkbox:
<input type="checkbox" name="checkme1" value="1" id="[s:-+][i:1]">
<input type="checkbox" name="checkme2" value="1" id="[s:-+][i:1]">

Et eksempel hvor begge checkboxe skulle være afkrydset kunne være:
<input type="checkbox" name="checkme1" value="1" id="[s:-+][i:1]">
<input type="checkbox" name="checkme2" value="1" id="[s:-+][i:2]">

Bemærk at de to id'ere [i:1] og [id:2] er forksellige og derfor valideres der på
dem begge.

Mit problem er følgende:
Jeg kan godt validere på to eler tre formfelter der har det samme id.
Men hvis id'erne er forskellige fucker det.

I følgende eksempel er der 3 checkboxe der alle skal være afkrydset.
Hvis jeg afkrydser den første og trykker på submit sendes formularen uden at der
valideres på de 2 andre formfelter.

Dette skyldes at når jeg løber min løkke igennem i min funktion angives en variabel "oIdent"
oIdent er lig med formfeltets id.

I min løkke laver jeg så endnu en løkke der løber alle formfelterne igennem en gang til for
at se om der er andre id'er der matcher oIdent. Hvis den finder et id (og den gør den - den finder nemlig sit eget id) der matcher og formfeltet
er afkrydset lægges der 1 til variablen "cCheckbox"

Hvis jeg derimod afkrydser checkbox 2 eller 3 fungere det fint.

Nederst har jeg pastet min kode.

Jeg håber virkelig der nogle der kan hjælpe mig - og igen spørg hvis der er noget i ikke forstår.

På forhånd tak. :-)

<script>

for (var i=0; i < oForm.length; i++) {
    oElement = oForm.elements[i];
    oElementID = oElement.id;
   
    var oIdent = objectType(oElementID, '[i:');

    if (oElement.type == 'checkbox') {
        if (oIdent != '') {
            for (var j=0; j < oForm.length; j++) {
                if (objectType(oForm.elements[j].id, '[s:') == '-+') {
                    //Det er her mit problem opstår :-(
                    //Når i = 0  har min løkke fat i den første checkbox.
                    //1. Jeg ser så først om denne er afkrydeset.
                    //2. Dernæst ser jeg efter om dets id = oIdent og det vil den automatisk
                    //være fordi i = 0
                    //Hvis 1 og 2 er sand vil den automatisk lægge 1 til cCheckbox
                    if ((oForm.elements[j].checked == true) && (objectType(oForm.elements[j].id, '[i:') == oIdent)) {
                        cCheckbox++
                    }
                }
            }
        }
    }

    if (cCheckbox == 0) {
        if (oElement.checked == false) {
            alert('Et eller andet intelligent');
            return false;
        }
    }
}

function objectType(oElementID, oType) {
    var returnType = '';
    if (oElementID.indexOf(oType) > -1) {
        returnType = oElementID.substring(oElementID.indexOf(oType)+oType.length,oElementID.length);
        returnType = returnType.substring(0,returnType.indexOf("]"));
    }
    return returnType;
}
</script>

<form name="oForm" action="test.html" method="post" onsubmit="return checkForm(oForm);">
<input type="checkbox" name="checkme1" value="1" id="[s:-+][i:1]"><br>
<input type="checkbox" name="checkme2" value="1" id="[s:-+][i:2]"><br>
<input type="checkbox" name="checkme3" value="1" id="[s:-+][i:3]"><br>
<input type="submit" value="Send">
</form>
Avatar billede Slettet bruger
19. februar 2002 - 00:43 #1
Hejsa - jeg har et par hjælpende punkter her:

1 - Din kode mangler linjen "function checkForm(oForm) {" i toppen for at det overhovedet virker (Cut'n'Paste-bøf, formentlig)

2 - Lav form-tagget sådan her i stedet (det vigtige er "this" i onsubmit-eventet):
<form name="theForm" action="test.html" method="post" onsubmit="return checkForm(this);">

3 - Den "egentlige" bug er at du ikke har initieret variablen "cCheckbox" - normalt ikke det store problem, men det første du (evt.) gør ved den, er at tælle den een op - fra hvad? spørger den klart...

Prøv det, og lad mig høre - jeg er med til det virker. (Og jeg får mine point :-)

/CS

PS: <script> skal have en type attribut for at være standard-kompatibel:
<script type="text/javascript">
Avatar billede Slettet bruger
19. februar 2002 - 00:45 #2
Nåja, der var lige det med "cCheckbox": Du sætter den jo bare til '0', et sted i toppen af molevitten, ikke?

/CS
Avatar billede entracore Nybegynder
19. februar 2002 - 09:29 #3
Hej Greystate

Min kode mangler ikke umiddelbart noget. Den kode jeg pastede var blot en lille part af hele koden - undskyld forvirringen.

Jeg har dog selv umiddelbart fundet fejlen. I if sætningen har jeg indsat endnu en if sætning der kalder en funktion der ser om "oIdent" optræder flere gang. Hvis oIdent optræder flere gange lægges der en til cCheckbox.

Se følgende eksempel:

if ((oForm.elements[j].checked == true) && (objectType(oForm.elements[j].id, '[i:') == oIdent)) {
    if (objectIdent(oForm, oIdent) == true) {
          cCheckbox++
    }
}

function objectIdent(oForm, oIdent) {
        var oCount = 0;
        for (var j=0; j < oForm.length; j++) {
            if (objectType(oForm.elements[j].id, '[i:') == oIdent) {
                oCount++
            }
        }
        if (oCount > 1) {
            return true;
        }
    }

Jeg ved godt at det hele måske er meget forvirrende. Jeg gerne poste hele sourcekoden når den er færdig.
Avatar billede entracore Nybegynder
13. april 2002 - 18:50 #4
Lukket
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