22. marts 2004 - 12:26Der er
36 kommentarer og 4 løsninger
onsubmit ikke ramt af form.submit()
Hej
Jeg har en form som SKAL valideres inden den submittes. Jeg har lavet alle funktioner, men problemet er at man i browserens add. kan skrive java script:document.form.submit() Også bliver onsubmit ikke kaldt.
Støv, fibre og metalliske partikler kan påvirke både uptime, levetid og driftssikkerhed. Derfor arbejder flere datacentre systematisk med contamination control.
i stedet for java script:document.form.submit() kalder du din validerings-funktion og så tilføjer du document.form.submit() i stedet for den sidste return true i funktionen
Ja det er fint nok, men man kan i browserens adresse linie skrive som jeg skrev : java script:document.form.submit() Så det er ikke noget som jeg selv laver, men noget som brugeren simplethen kan gøre....
Det er ikke noget jeg ønsker, men noget der altid er muligt....
Problemet ligger i at man ikke må kunne submitte min form uden at de forskellige felter er udfyldt, men det kan man altså ved at skrive submit i browser linien...!
du kan evt prøve at lade din form have action="" indtil du har valideret formen og så sætte din action med document.form.action="side.html" lige før du kalder document.form.submit() - på den måde afværger du i hvert fald at det får nogen betydning for din side...
så er den eneste mulighed (jeg umiddlebart kan se) at disable adresselinien vha: <body onblur="location.href=location.href"> men det kan jo ikke siges at være en særlig holdbar løsning at begrænse brugerens muligheder på den måde...
En forms onsubmit-event bliver aldrig fyret af, når man submitter formen via JavaScript.
Stort set alt, hvad du i dokumentet kan gøre med JavaScript, kan du også gøre med JavaScript i adresselinien. Derfor kan du ikke komme udenom dit problem med dagens web-teknologier.
I øvrigt kan clientside-validering aldrig afløse serverside-validering. Clientside-validering er kun en luksus til ære for brugeren. Det er en giga sikkerhedsbrist at belave sig på den. Man skal _altid_ validere bruger-input grundigt på serveren.
-- og hvornår bliver det nogensinde for alvor et problem, at folk kan skrive det i adresselinjen ?-)
For hvem i h***, h*** h****** vil dog finde på det, når man bare kan trykke på en knap, når man vil sende ...
-- og hvis du bruger mm12010s trick vil det ovenikøbet kræve, at brugeren, som også skal være internet- og javascript-ekspert, kender den nøjagtige adresse på dit script, eller har gidet knække din javascripting ...
-- og du har jo alligevel noget server-side scripting i en asp-fil !-)
-- hvis du vil gøre det sværere for den ene bruger, du nogensinde får, som kunne finde på det (= kasseper !-), kan du jo også definere en tom .submit-funktion på din form, men vi er ude i at sikre på en måde, som jeg kun kender en løsning på:
Bed folk om at komme og aflevere et stykke papir, så du selv kan skrive data ind !o]
roenving >> Hvordan definere jeg en tom .submit funktion på min form...?
Og OK, her kommer historien. Sagen er den at jeg skal lave en mulighed for at holde en server-timeout i live, hvilket gør at jeg PÅ klienten skal holde styr på hvor længe en bruger er på min side, uden at requeste serveren. Der skal så ske det, at når brugeren klikker på submit knappen, skal den afgøre om formen skal submittes eller ej, afhængigt af om der er gået for meget tid eller ej. Er tiden gået skal der komme en pop-up hvor man kan logge ind, for så bagefter at submitte igen..... OK, så det er senariet.
Kan du så ikke bare prompte brugeren, når tiden er gået ?-)
document.forms[0].submit = new Function (){void(0)}//absolut utestet ...
-- men jeg har engang siddet og puslet med en brugers problem i flere timer, før det gik op for mig, at han havde navngivet en variabel (tror jeg !-), som en af de native funktioner, som skulle bruges !o]
kasseper >> olebole har jo lagt et svar til dig som du er nødt til at tage stilling til ( @ 22/03-2004 16:15:32 ). Hvis du ikke vil acceptere det simple faktum han kommer med her, så gør du det også meget svært for dig selv.
Han beder også om at du kommer med de oplysninger der er relevante i denne sammenhæng, noget du hellere ikke gør. det virker ikke som om du har lyst til at få løst dit problem, for du holder jo hele tiden kortene godt indtil brystet.
Du har også fået nogle hints fra roenving angående brug af client-side "validering".
Du giver jo hellere ingen forklaring på hvorfor du er nødt til at have denne client-side validering ?!
At du uddeler dårlig karma til olebole, fordi du ikke forstår hans kommentarer til dig, er jo dit problem, og jeg tror nok også olebole er ligeglad med de karma-points, men du bør hvertfald tage imod de råd og hints du får, og måske uddybe og spørge mere omkring dem. Det er *altid* mere end én måde at løse et problem på ... prøv at lad os hjælpe dig til at kigge på tingene fra en anden vinkel istedet for at hårdnakket påstå at den løsningsmodel du har fundet på, er den eneste rigtige
nute >> Jeg kan ikke se noget der minder om at løse mit problem i oleboles svar fra 16:15...
Han siger at det ikke kan lade sig gøre, OK, men derfor lukker jeg jo ikke spørgsmålet. At olebole stort set altid har ret, er en anden ting.
Anyway, så gir jeg dig ret i at jeg ikke gav alle oplysninger om mit problem, men nok (efter min mening) til at man kan finde ud af problemet. At der godt kan være andre måder at gøre tingene på, er jeg fuldt ud klar over, men det var bare ikke det jeg spurgte om.
Jeg har vel ret til at stille et spørgsmål vedr. et problem, uden straks at skulle ha tudet ørene fulde om at det er en dårlig løsning....? Det kunne jo være at andre måder at løse problemet på, bare ikke er mulige i dette scope....Men at skulle gøre rede for hvorfor de andre muligheder ikke er mulige, vil være at gå for langt. NETOP derfor har jeg kun skrevet de få oplysninger i beskrivelsen, for ikke at andre skulle finde alternativer, men kun fokusere på det aktuelle problemet.
Og så mener jeg iøvrigt at jeg er i min gode ret til at uddele dårlig karma, hvis det passer mig. Og det passede mig i dette tilfælde, da jeg ikke mener at olebole, har nogen saglig grund til at bevæge sig ud i kritik af løsningen, som ligger ud over det problem som jeg beskrev...!
Any way nu går det vist diskutions klub i den....!
kasseper >> med reference til 16:15, så løser han jo dit problem, nettop som du selv skriver: "det kan ikke lade sig gøre" :-) Men at diskutere hvordan man forstår en uddtalelse, kan jo blive en "ordspasser konkurrance" ...
Selvfølgelig har du da ret i at stille et spm uden at blive tuden ørene fulde ... det er dog ingen der har skrevet at det er en dårlig løsning ... der er nogle der har stillet meget store spørgsmålstegn ved din løsningsmodel - dette er to meget vidt forskellige ting. Der er nogle (ja ... ok ... roenving og olebole - det er jo intet point i at referere til "anonyme personer" når det er så få der deltager i tråden ;o] ) der har uddelt sine erfaringer med denne problemstilling, og fortalt lidt om hvilke hensyn du burde tage (måske på en lidt hård måde, men overdrivelse fremmer også forståelse)
"Det kunne jo være at andre måder at løse problemet på, bare ikke er mulige i dette scope" - true ... men det kan jo ikke *vi* vide uden at vi enten får det at vide, eller at vi finder frem til dette "i fællesskab" (og jeg snakker ikke om dét fællesskab der findes på ø-lejr ;o] )
Og igen ... hvis du på baggrund af at olebole har været hård mod dig én gang i én tråd, så bliver også karma-systemet misbrugt. Jeg læste lige en laaaaang tråd om denne "problematik" her i søndags og nettop denne måde at bruge karma på, bliver diskuteret.
"Du giver jo hellere ingen forklaring på hvorfor du er *nødt* til at have denne client-side validering ?!"
Men som olebole allerede har skrevet, dit ønske vil jo altid fejle ... og som roenving pointerer ... hvem vil bruge adressebar'en til at skrive "java script:document.ditform.submit()" ??
<snip> Men som olebole allerede har skrevet, dit ønske vil jo altid fejle ... og som roenving pointerer ... hvem vil bruge adressebar'en til at skrive "java script:document.ditform.submit()" ?? </snip> <ref> Sagen er den at jeg skal lave en mulighed for at holde en server-timeout i live, hvilket gør at jeg PÅ klienten skal holde styr på hvor længe en bruger er på min side, uden at requeste serveren. Der skal så ske det, at når brugeren klikker på submit knappen, skal den afgøre om formen skal submittes eller ej, afhængigt af om der er gået for meget tid eller ej. Er tiden gået skal der komme en pop-up hvor man kan logge ind, for så bagefter at submitte igen..... </ref> Folk som ønsker at submitte min form, uden at logge ind igen....!
er det et *krav* at man ikke skal requeste serveren ? er det ikke en mulighed at holde sin session i live ved fx at bruge en iframe, der refresher "sig selv" fx hvert 5. minut ? på denne måde vil din session hele tiden blive holdt levende så længe du befinder dig på den side du ønsker at holde den i live
Ok, så kommer den.... VI har sat vores server timeout til 8 timer, men ønsker når en person bruger mere end 15 min på en side, at personen, skal logge ind igen, men via en pop-up, således at vi ikke mister de data brugeren har skrevet på siden, når den submittes, og for at sikre at ingen andre kan submitte formen, uden først at angive password...!
så er vi tilbage til oleboles kommentar igen ... det kan ikke gøres ( hvertfald ikke med javascript ) - og som roenving skriver: "For hvem i h***, h*** h****** vil dog finde på det" ... jeg kender ikke dem der vil finde på at gøre det, men hvis du mener det er et problem, så kan jeg jo ikke tage stilling til det.
en anden måde at løse det på, er at du faktisk tillader at siden bliver submittet, men det der sker, er at *hvis* der er gået mere end 15 minutter, så bliver ikke data gemt. Jeg ville have gjort det på følgende måde:
- jeg smider alle felter op i min session - Jeg tjekker for om tiden er udløbet - jeg bliver logget ind igen (- min formularside bliver lastet igen, hvis dette er ønskelig. nu har jeg jo alle mine værdier i min session, så jeg kan sagtens sætte værdier i felterne) - Siden bliver submittet igen, og nu fungerer det fint fordi jeg nu er logget på igen.
dette er også en løsning der er mere holdbar end en javascript løsning. Du skal jo også tænke på at det ikke er alle der har jaascript enabled i sin browser ... hvad med dem ?
nute >> Du har helt ret: Jeg har vanskeligt ved at tage karma-funktionen højtidelig.
Den bliver i udstrakt grad brugt af små drenge med en stor trang til at udlukke dårlig tarmluft - uden at give sig til kende. Før i tiden var der da i det mindste et navn på den badeand, folk fik i nakken :) /mvh
ideen er droppet. Men jeg deler da gerne lidt ud til de implicerede parter for tiden de har brugt. olebole og nute havde de mest seriøse bud på en løsning, så svar og så for lidt i skuffen..!
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.