02. april 2004 - 09:18Der 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!
<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>
<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>
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.
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 ...
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.