Avatar billede clausn Nybegynder
02. april 2004 - 09:18 Der er 5 kommentarer og
1 løsning

Validering af tal på dynamiske felter

Hej eksperter!

Jeg har lavet mig en webshop og skal have noget validering på felterne.
Min form ser meget groft sådan her ud:
<form action='add-to-basket.asp' method='post'>
<input type='text' name='4525486' value=''>
<input type='text' name='4528484' value=''>
<input type='text' name='4595454' value=''>
<input type='text' name='4525424' value=''>
<input type='text' name='4525487' value=''>
<input type='submit' value='Gem'>
</form>

Som den skarpe person nok kan se kan navnet på felterne skifte alt efter hvad varenummeret er.

Hvordan kan man sikre sig at brugeren kun må indtaste tal og hvis brugeren indtaster mere end 50 i et felt skal den komme op med en confirm-boks om man er sikker på at man ønsker at bestille så højt et antal.

Den skal selvfølgelig komme op med en advarsel hvis man prøver at gemme uden at have instastet noget overhovedet!

Der kan være alt fra 2 til 50 felter på en side.

PFT :-)
Claus
Avatar billede mm12010 Nybegynder
02. april 2004 - 09:50 #1
sådan ?

<script type="text/javascript">
function kunTal(f){
    err=false;
    el=f.elements;
    for(i=0;i<el.length;i++){
        if(el[i].type=="text"&&el[i].name.match(/^[0-9]+$/)){
            if(!el[i].value.match(/^[0-9]+$/)){
                alert("feltet("+el[i].name+") må kun indeholde tal.");
                el[i].focus();
                el[i].select();
                err=true;
                }
            else if(el[i].value.length>50){
                err=confirm("er sikker på at man ønsker at bestille så højt et antal?");
                }
            if(err) return false;
            }
        }
    return true;
    }
</script>

...

<form action='add-to-basket.asp' method='post' onsubmit="return kunTal(this);">
Avatar billede roenving Novice
02. april 2004 - 12:40 #2
<script type="text/javascript">
function valider(f){
  var elms = f.elements,ok=false,reg=/^\d+$/;
  for(i=0;elms.length>i;i++){
    if(elms[i].type=='text' && elms[i].name.match(reg)){
      if(elms[i].value.length>0&&!elms[i].value.match(reg)){
        alert('Du kan kun skrive antal på varen');
        elms[i].select();
        elms[i].focus();
        return false;
      }else if(+elms[i].value>50){
        if(!confirm('Er du sikker på at du vil bestille '+elms[i].value+' stk.\naf varenummer '+elms[i].name +'?')){
          elms[i].select();
          elms[i].focus();
          return false;
        }else ok = true;
      }else ok = ok||(elms[i].value.length>0);
    }
  }
  return ok;
}
</script>

<form 'add-to-basket.asp' method='post' onsubmit='return valider(this);'>
<input type='text' name='4525486' value=''><br>
<input type='text' name='4528484' value=''><br>
<input type='text' name='4595454' value=''><br>
<input type='text' name='4525424' value=''><br>
<input type='text' name='4525487' value=''><br>
<input type='submit' value='Gem'>
</form>
Avatar billede clausn Nybegynder
02. april 2004 - 13:57 #3
roenving > Lav et svar hvis du vil have noget points :-) Det spiller max... Evt. kunne jeg da godt tænkte mig på en eller anden måde at få teksten til varenummeret med, men jeg ved ikke lige hvor jeg skulle skrive det henne?

Det var bare i stedet for at den bare skriver om man er sikker på at bestille x antal af varenummeret og ikke af dets rigtige navn.
Avatar billede roenving Novice
02. april 2004 - 14:15 #4
Så skal du også have det varenavn et sted, hvor vi kan finde det !-)

En normal taktik ville være, at have det sammen med varenummeret, men den går jo ikke, når du bruger varenummer som name ...

Men hvis du ikke har så mange varenumre/varetekst-par på en form, kunne du lægge dem i et hidden field, f.eks. sådan:

<input type="hidden" name="varetekst" value="4525486|Et par flotte sko#4528484|Grimme sko">

-- så kunne javascriptet nemt finde værdierne !o]

-- men det afhænger en hel del af, hvilke tegn, som er lovlige i vareteksterne, så en mere stabil model kunne være, at du lige før dine indtastningsfelter lagde et hidden felt med et 't' foran navnet (varenummeret !-) og så vareteksten som value, så kunne vi på vores vej igennem alle felter opsamle varenavne løbende, for vi skal jo kun bruge dem i forbindelse med confirm-tingen ...

Noget andet er så, at det ikke er så godt i forhold til post-action, da det vil forøge mængden af afsendte værdier voldsomt ,-|

Så alt i alt vil jeg anbefale, at du skriver en lille javascript-database:

var tekster = new Array();
<%
'løkken som henter varenr. og -tekst
do while 'eteller andet
Response.Write "tekster["&rs("varenr")&"]='"&rs("varetekst")&"';"&vbcrlf
loop
%>

Her i vbscript-style, men det skulle ikke være svært at omsætte, hvis du f.eks. bruger php ...

-- ellers velbekomme '-)
Avatar billede roenving Novice
02. april 2004 - 15:21 #5
Hov, der manglede et par plinger:

Response.Write "tekster['"&rs("varenr")&"']='"&rs("varetekst")&"';"&vbcrlf

-- vil jeg da anbefale, for der er ikke nogen grund til at javascript skal tro, at der er millioner af poster i arrayet !-)
Avatar billede roenving Novice
16. juni 2004 - 18:11 #6
-- og tak for point ;~}
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