Avatar billede tgl Nybegynder
17. februar 2003 - 22:49 Der er 17 kommentarer og
1 løsning

Submitter for hutigt til ny side

Jeg har en asp-side med en form. Felterne skal først valideres før end de indtastede værdier videresendes til næste side.

Er der fejl i indtastningen popper en alert-box op og forklarer nærmere.
Derefter klikker man på OK for at lukke alert-boksen igen, men når man gør det submittes formularen og det er ikke meningen.

jeg kalder i form-taggen en javascript funktion kaldet
valider().
Skriver jeg return foran den submittes siden ikke uanset om formularen er korrekt udfyld eller ej.

Så kort fortalt skal formen kun submittes når den er fuldstændig og korrekt udfyld og ikke før.

Hvordan håndterer jeg det problem???
Avatar billede Slettet bruger
17. februar 2003 - 22:51 #1
bruger du onsubmit="" tagget i din form?
Avatar billede Slettet bruger
17. februar 2003 - 22:59 #2
Kan godt uddybes!?

<script language="javascript">ø
function valider()
{
    if(korrektformular)
    {
        return true;
    }
    else
    {
        return false;
    }
}
</script>


<form onsubmit="return valider()">
Avatar billede pelkjaer Nybegynder
17. februar 2003 - 23:02 #3
function valider(form) {
if (felt_er_ok) {
  } else {
      alert ("felt er ikke ok.");
      form.felt.focus();
      return false;
  }
  //til sidste kører du en return true;
  return true; // alle felter er ok
}
Avatar billede tgl Nybegynder
17. februar 2003 - 23:21 #4
westhi>> ja, jeg bruger onsubmit i form-tagget.
Avatar billede Slettet bruger
17. februar 2003 - 23:26 #5
tgl>>
Hvis du ikke vil submitte formularen:
onsubmit="return false;"
Hvis formularen skal submittes:
onsubmit="return true";

Med andre ord:
Sørg for, at valider() returnerer true hvis den skal submittes og false hvis den ikke skal submittes!
og onsubmit="return valider()"
Avatar billede pelkjaer Nybegynder
17. februar 2003 - 23:29 #6
Yes.

Tager du fx. mit eks, submitter du med

onsubmit="return valider(this);"
Avatar billede midas_dk Nybegynder
18. februar 2003 - 10:21 #7
Man kunne jo også bare kalde funktionen vha. onclick, og så submitte via selve javascriptet...?

form.submit();
Avatar billede Slettet bruger
18. februar 2003 - 12:26 #8
midas>>Problemet ved onclick er at det kun dækker for den enkelte knap.
Du kan f.eks. også submitte en form ved hjælp at [ENTER] i tekstfelter.
Avatar billede midas_dk Nybegynder
18. februar 2003 - 13:39 #9
Nåh ja, min fejl...
Avatar billede tgl Nybegynder
18. februar 2003 - 13:45 #10
Formen skal submittes, men først når alle input-felter er korrekt udfyldt. Jeg har nu i min form-tag tilføjet return så der nu står
onSubmit="return validate();".

Dermed popper alert-boksen ved fejl stadig op som den skal, men selv når alle felter er korrekt udfyld submitter den IKKE formens indhold og der er jo heller ikke meningen.

Så indtil nu er jeg lige vidt.
Avatar billede midas_dk Nybegynder
18. februar 2003 - 13:46 #11
Så er det i dine valideringskriterier, den er gal...
Avatar billede Slettet bruger
18. februar 2003 - 13:47 #12
Så ligger problemet i indholdet af funktionen validate()...
Hvis du ikke kan se logikken i det pelkjaer og jeg har smidt bliver vi nok nød til at se noget kode før vi kan hjælpe dig!
Avatar billede tgl Nybegynder
18. februar 2003 - 13:54 #13
Dette kode er på asp-siden :

<script language="JavaScript">
function validate()
{
var fields=new Array();
fields[0]=new fieldValidation('holdnavn','Holdnavn',BIT_NOT_EMPTY);
fields[1]=new fieldValidation('kl','Klasse',BIT_ONE_SELECTED);
fields[2]=new fieldValidation('firma','Firma/Forening',BIT_NOT_EMPTY);
fields[3]=new fieldValidation('firmaadr','Firma-adresse',BIT_NOT_EMPTY);
fields[4]=new fieldValidation('postnr','Postnr.',BIT_NOT_EMPTY|BIT_VALID_POSTNR);
fields[5]=new fieldValidation('bynavn','By',BIT_NOT_EMPTY);
fields[6]=new fieldValidation('kontakt','Kontaktpersons navn',BIT_NOT_EMPTY);
fields[7]=new fieldValidation('tlf','Kontaktpersons telefonnr.',BIT_NOT_EMPTY|BIT_VALID_TLF);
fields[8]=new fieldValidation('email','Kontaktpersons e-mail',BIT_NOT_EMPTY|BIT_VALID_EMAIL);
return validateForm(document.forms[0],fields);
}
//-->
</script>

...
<form action="butik/betal.asp" method="post" name="tilmeldForm" onSubmit="return validate();">
...
-----------------------------------------------------------------------------
Funktionerne FieldValidation(), validateForm() og BIT_NOT_XXX er inkluderet i filen valider.js

Kode :

//fieldValidattion objektet understøtter følgende bits til at validere,
//BIT_NOT_EMTPY = giver sig selv, validerer om feltet er tomt.
//BIT_VALID_EMAIL=Valid email, dvs. korrekt syntax
//BIT_ONE_SELECTED= Der er valgt mindst en mulighed i en selectionbox, checkbox, radio button
//BIT_VALID_DATE= Valid dato efter formatet dd-mm-yyy
//BIT_VALID_TLF= Valid tlfnr paa formatet 01234567
//BIT_VALID_POSTNR= Valid postnr. paa formatet 0123

var BIT_NOT_EMPTY = Number(1);
var BIT_ONE_SELECTED=Number(2);
var BIT_VALID_EMAIL=Number(4);
var BIT_VALID_DATE=Number(8);
var BIT_VALID_TLF=Number(16);
var BIT_VALID_POSTNR=Number(32);

var FLD_TYPE_TEXT="text";
var FLD_TYPE_SELECT="select-one";
var FLD_TYPE_SELECT_MULTIPLE="select-multiple";
var FLD_TYPE_RADIO="radio";
var FLD_TYPE_CHECKBOX="checkbox";
var FLD_TYPE_PASSWORD="password";

var ERR_MSG_START="Der er mangler i formularen som skal rettes før end"+"\n"+"du kan fortsætte tilmeldingen til DHL-stafetten 2003.";
var ERR_SEP="\n-----------------------------------------------------------------------\n";
var ERR_SEP2="------------------------------------------------------------------------\n";
var ERR_MSG_END="Ret venligst og klik på ''Fortsæt til betaling ->''";

function getErrorMessage(label,bits2)
{
    var ret="";
    bits=parseInt(bits2);
   
    if(Number(bits & BIT_NOT_EMPTY)==BIT_NOT_EMPTY)
    {
        ret=ret+", skal indtastets";
    }
    if(Number(bits & BIT_ONE_SELECTED)==BIT_ONE_SELECTED)
    {
        ret=ret+", skal vælges";
    }
   
    if(Number(bits & BIT_VALID_EMAIL)==BIT_VALID_EMAIL)
    {
       
        ret=ret+", skal indtastes på formen xxx@yyy.zz";
    }
    if(Number(bits & BIT_VALID_DATE)==BIT_VALID_DATE)
    {
        ret=ret+", Must contain a valid date";
    }

    if(Number(bits & BIT_VALID_TLF)==BIT_VALID_TLF)
    {
        ret=ret+", skal indeholde 8 tal";
    } 

    if(Number(bits & BIT_VALID_POSTNR)==BIT_VALID_POSTNR)
    {
        ret=ret+", skal indeholde 4 tal";
    } 

    ret=ret.substr(1);
    ret=label+" --> "+ret;

    return ret;
}
function validateField(form,fieldN,bits2)
{
    var ret=0;
    var field;
    bits=parseInt(bits2,10);

    if(Number(bits & BIT_NOT_EMPTY)==BIT_NOT_EMPTY)
    {
        field=form.elements[fieldN];
        if(field.type==FLD_TYPE_TEXT || field.type==FLD_TYPE_PASSWORD)
        {
            if(field.value=='')
            {
                ret=ret | BIT_NOT_EMPTY;
            }
       
        }

    }
    if(Number(bits & BIT_ONE_SELECTED)==BIT_ONE_SELECTED)
    {
        field=form.elements[fieldN];
        if(field.type==FLD_TYPE_SELECT)
        {   
            field=form.elements[fieldN];
            if(field.options.selectedIndex==-1)
            {
                ret= ret | BIT_ONE_SELECTED;
            }
        }
        else if(field.type==FLD_TYPE_SELECT_MULTIPLE)
        {
            field=form.elements[fieldN];
            var localSel=false;
           
           

            for(x=0;x<field.options.length;x++)
            {

                if(field.options[x].selected==true)
                {

                    localSel=true;
                }
            }
            if(localSel==false)
            {
                ret= ret | BIT_ONE_SELECTED;
            }
                        /*  */
        }
        else // if(field.type==FLD_TYPE_RADIO || field.type==FLD_TYPE_CHECKBOX)
        {
            var localSelected=false;
            //field=form.elements[fields[xy].field];
            for(x=0;x<form.elements.length;x++)
            {
                field=form.elements[x];
                if(field.name==fieldN)
                {
                    if(field.checked==true)
                    {
                        localSelected=true;
                    }
                }
            }
            if(localSelected==false)
            {
                ret= ret | BIT_ONE_SELECTED;
            }
        }

    }

    if(Number(bits & BIT_VALID_EMAIL)==BIT_VALID_EMAIL)
    {
        var localValid=true;
        if(field.type==FLD_TYPE_TEXT)
        {
            if(field.value!='')
            {
                if(field.value.indexOf('@')==-1)
                {
                    localValid=false;
                }
                if(field.value.length<6)
                {
                    localValid=false;
                }   
            }
           
        }
        if(localValid==false)
        {
            ret= ret | BIT_VALID_EMAIL;
        }
    }
    if(Number(bits & BIT_VALID_DATE)==BIT_VALID_DATE)
    {
        var localValid=true;
        if(field.type==FLD_TYPE_TEXT)
        {
            if(field.value!='')
            {
       
                if(field.value.length<10)
                {
                    localValid=false;
                }
                else
                {
                    if(field.value.substr(2,1)!='-')
                    {
                        localValid=false;
                    }
                    if(field.value.substr(5,1)!='-')
                    {
                        localValid=false;
                    }
                }
            }
           
       
        }
       
        if(localValid==false)
        {
            ret= ret | BIT_VALID_DATE;
        }
    }

    if(Number(bits & BIT_VALID_TLF)==BIT_VALID_TLF)
    {
        var localValid=true;
        if(field.type==FLD_TYPE_TEXT)
        {
            if(field.value!='')
            {
              if(field.value.length<8)
                {
                    localValid=false;
                }
                else
                {
                    if (isNaN(field.value))
                    {
                        localValid=false;
                    }
                }
            }
           
       
        }
       
        if(localValid==false)
        {
            ret= ret | BIT_VALID_TLF;
        }
    }
   
    if(Number(bits & BIT_VALID_POSTNR)==BIT_VALID_POSTNR)
    {
        var localValid=true;
        if(field.type==FLD_TYPE_TEXT)
        {
            if(field.value!='')
            {
              if(field.value.length<4)
                {
                    localValid=false;
                }
                else
                {
                    if (isNaN(field.value))
                    {
                        localValid=false;
                    }
                }
            }     
        }
       
        if(localValid==false)
        {
            ret= ret | BIT_VALID_POSTNR;
        }
    }

  return ret;
}

function fieldValidation(field1,label1,bits1)
{
    this.field=field1;
    this.label=label1;
    this.bits=bits1;
    return this;
}

function validateForm(form,fields)
{
var ret=false;
var errMsg=ERR_MSG_START+ERR_SEP;
var err=false;
var valid=0;

    for(xy=0;xy<fields.length;xy++)
    {
       
        valid=validateField(form,fields[xy].field,fields[xy].bits);
       
        if(valid!=0)
        {
            err=true;
            for(x=0;x<form.elements.length;x++)
            {
                if(form.elements[x].name==fields[xy].field)
                {
                    //form.elements[x].style.backgroundColor='#ff0000';
                }
            }
            //form.elements[fields[xy].field].style.backgroundColor='#ff0000';
            errMsg=errMsg+getErrorMessage(fields[xy].label,valid)+"\n";
        }
        else
        {
            for(x=0;x<form.elements.length;x++)
            {
                if(form.elements[x].name==fields[xy].field)
                {
                    form.elements[x].style.backgroundColor='#ffffff';
                }
            }
            //form.elements[fields[xy].field].style.backgroundColor=
        } 
    }
errMsg=errMsg+ERR_SEP2+ERR_MSG_END;
if(err==true)
{
alert(errMsg);
}
return ret;
}
Avatar billede Slettet bruger
18. februar 2003 - 13:56 #14
Følgende skulle løse dit problem!?

if(err==true)
{
alert(errMsg);
return false;
}
return true;
}
Avatar billede Slettet bruger
18. februar 2003 - 13:57 #15
NB det er i bunden af funktionen validateForm()
Avatar billede tgl Nybegynder
18. februar 2003 - 14:19 #16
Herligt!

Det virker nu efter hensigten.

60 point til regin og også tak til alle andre.
Avatar billede Slettet bruger
18. februar 2003 - 14:21 #17
*SMIDER ET SVAR*
:P
Avatar billede tgl Nybegynder
18. februar 2003 - 14:21 #18
Øhm, der er kun svar fra mig selv, men ikke regin så indtil videre kan jeg ikke give point for svaret.
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