12. marts 2001 - 15:01Der er
24 kommentarer og 3 løsninger
Valider formfelt ud fra Ayyar
Jeg har en ASP løsning kørende, hvor brugerne kan oprette nye varer, men jeg ville gerne kunne validere hvorvidt en vare allerede er oprettet under det netop indtastede varenr. Min tanke var så at jeg kunne lave et JS array via ASP og så validere op mod dette når brugeren \"tab\"ede ud af feltet.
Min form hedder \"opret_produkt\" og feltet jeg gerne vil validere hedder \"varenr\". Kan I henvise til nogle eksempler eller vise noget kode. ?
I dette særtema ser vi på, hvordan cloud og AI bliver fundamentet for virksomhedernes digitale forretning, og hvordan de nye muligheder for automatisering og forretningsværdi kan udnyttes uden at miste overblik, sikkerhed og menneskelig kontrol.
Jeg er ude efter at bygge et array i ASP (let nok) og når brugeren indtaster et varenr i \"varenr\" (onChange ?) bliver dette valideret op imod det array der er bygget. HVIS varenr allerede eksisterer i array, vises en advarsel om dette, så brugeren ikke opretter et varenr flere gange.
function insertMaybee( frm ) { // indsætter nyt varenummer // (hvis det ER nyt ) for ( var i=0; i<sortiment.length; i++ ) { if ( frm.varenr == sortiment[i].varenr ) { alert( \"der er allerede en vare med det varenummer\" ); return; }; }; sortiment[sortiment.length] = makeElem( frm.varenr, frm.varebsk ); }; //end insertMaybee( form objekt )
Hej JakobA Mit array bliver bygget ud fra en db i ASP, det er når brugeren vil oprette en ny vare til denne db, at jeg vil kontrollere om den allerede er oprettet i db\'en.
Så jeg er ikke ude efter at oprette det array igennm js. (hvis jeg forstod din kode korrekt?) /Mark
Et array du opretter på serveren med ASP (serverside) kan ikke ses eller bruges af javascript (clientside). så jeg gik ud fra du genererede kode til at bygge arrayet i javascript.
For at checke det indtastede op imod serverside data er det nok nemmere at submitte formen og lade ASP udføre testen. ASP kan så svare tilbage og fortælle om det gik godt eller skidt.
Nu har du fat i den rigtige ende, men det var for at udngå at brugeren skal indtaste hele molevitten for så at få at vide at denne vare allerede var oprettet. Min tanke var så at jeg kunne lave dette array i min side, ikke i et VB array, og checke at det nyindtastede varenr er NYT.
stop stop. Jeg er ret sikker på at jeg kan lave det array via VBScript, så det eksisterer når siden bliver loadet i browseren. Men hvordan validerer jeg 1 felt op imod dette array ?
Jeg tror jeg gir min version af forståelsen af spg. Du vil gerne ha at din ASP side generere et Javascript array, som du run-time, altså på klienten kan tjecke det indtastede opimod ik? Det kan sagtens lade sig gøre....
sortiment er et array der indeholder hele rækker. Det var nok fjollet for der er ingen grund til at have andet en selve varenummeret i det så der kan testes.
Hulk Snøft, men jeg forstår ikke hvad den funktion laver. Når jeg læser den er det som om at den tilføjer varenr til det array ?
Men det jeg vil have er at det array allerede eksisterer komplet når siden genereres af ASP koden. Så feltet varnr har en OnChange der tester imod det array.
Ja Array\'et skal eksistere når siden er loadet, men skal du bruge ASP koden til at generere det ? eller hur ? Det kan jeg sagtens lave, men jeg har ikke rigtig tid før om nogle dage, men mon ikke der er nogle af de andre der lige kan lirre det af, ja måske kunne ericjakobsen lige ryste det ud af ærmet.... Ellers skal jeg nok kigge ind om et par dage.... ericjakobsen har jo sådan set lavet recepten, han skal nok bare lige overtales til at forklare det lidt nærmere....:)
Jeg er blevet lidt overvældet af hvor komplekst der umiddelbart virker (!) Jeg tænker også på hvor meget det array fylder når nu der er oprettet 5000 varenr i dette array, det skal jo stadig downloades.
Jeg barsler med en ny idé....
Hvordan kan jeg submitte min form til validering onChange i feltet varenr.
Nå men jeg skal desværre hjemad nu, så der er et par timer til jeg er på igen. (vasketøj, madlavning, the works!)
<? ;her genereres arrayet fra den eksisterende DB med en masse linier a la: makeElem( \"123456\" ); ?>
function insertMaybee( frm, insOK ) { // indsætter nyt varenummer // (hvis det ER nyt ) for ( var i=0; i<sortiment.length; i++ ) { if ( frm.varenr == sortiment[i]) { alert( \"der er allerede en vare med det varenummer\" ); return; }; }; if ( insOK ) makeElem( frm.varenr ) else alert( \"Det varenummer kender jeg ikke\" ); }; //end insertMaybee( form objekt, boolean )
nu har din form to knapper. en til at teste, der blot fortæller om varen findes og en til at indsætte varen ( submitter varedata og indsætter varenr i arrayet )
submitten action fil skal blot indsætte i databasen. Den behøver ikke at generere formsiden een gang til for vi husker hvilke varenumre der er blevet submittet ved at gemme dem i arrayet.
Jeg ville ikke umiddelbart, bruge denne metode når nu der er så mange varenumre, man skal tænke på at der altså stadig er folk med 33.6 modems....*g* Er det ikke noget med onChange=\"submit(this.form);\" ?????????????????????????????
Tja, som kasseper kommenterer, så har jeg overvurderet denne mulighed, jeg syntes stadig at den er fed nok, men brugerne kommer til at downloade et kæmpearray. Måske skulle jeg gøre det at jeg checker via ASP anyhow.
Bliver det så bare noget ala... <input type=\"text\" name=\"varenr\" onChange=\"submit(this.form);\"> Så smutter formen ud og jeg kan validere de data.
Det er for vildt med det her eksperten...
Er det OK hvis jeg fordeler mellem svarerne, jeg ville dog foretrække om kasseper også lige ville melde sig til pointuddeling !!
Ok, med 5000 varenumre tager det lidt tid - og det er næppe ulejligheden værd. Iøvrigt bør man vel bruge den \"associerede array\" effekt i objekter i JS, så man ikke selv behøver at søge. Noget i retning af:
var a = new Object(); a.X123=1; a.Xd558=1;
for varenumre 123 og d558 (X-et er med fordi det skal begynde med et bogstav). Så kan man slå op med
if (eval(\"a.X\"+nr)) { ok } else { error }
Hvis mængden ikke er totalt uoverkommelig kan man lægge det i en ramme, så det trods alt kun skal hentes én gang, selv om kunden afgiver flere ordrer.
Men den med kun at bruge ASP er nu også ret go\' :)
Den bestes \"browsersikre\" on the fly tester er nok onBlur=\"test_funktion(this)\" den aktiveres hvergang du fjerner fokus fra feltet. som fx når du har skrevet noget i feltet og klikker i et andet for at skrive der.
her kunne test_funktion() så være noget a la:
function test_funktion( frmElem ) { // kaldes fra et text-felt hvor der skal // indtastes varenr i formen 3 til 5 cifre if ( this.value.length == Math.max( 3, Math.min( 5, this.value.length ) ) { // lovligt antal bogstaver var OK = true for ( var i=0; i<this.value.length; i++ ) OK = OK && ( \"o123456789\".indexOf( this.value.substr( i, 1 ) ) != -1 if ( OK ) { // det var bar cifre. feltet er helt iorden return true; } else { // feltet indeholder ikke kun cifre. kasseret alert ( \"der må kun indtastes cifrene 0..9\" ); this.focus(); return false; }; }; alert (\"der skal indtastes et tal mellem 100 og 99999\" ); this.focus; return false; }; //end test_funktion ( form_inputfelt objekt ) -> boolean
Ups: der skal være 3 slutparenteser i if ... linien så det bliver: if ( this.value.length == Math.max( 3, Math.min( 5, this.value.length ) ) ) {
linien OK = OK && ( \"o123456789\".indexOf( this.value.substr( i, 1 ) ) != -1 if ( OK ) { skal være 2 linier adskildt med ; OK = OK && ( \"o123456789\".indexOf( this.value.substr( i, 1 ) ) != -1 ); if ( OK ) {
og det o (bogstav o) i cifferrækken skal nok hellere være et 0 (ciffer 0) må hellere stoppe her :-))
Synes godt om
Ny brugerNybegynder
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.