/ Forside / Teknologi / Udvikling / Java Scripts / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
Java Scripts
#NavnPoint
molokyle 5410
Klaudi 2799
smorch 2439
kim 1360
Harlekin 1134
bentjuul 984
gibson 800
severino 695
Random 675
10  konsulent.. 626
Formularvalidering
Fra : Jørgen Farum Jensen


Dato : 20-03-10 15:09

Hvad er der galt med denne funktion:

function tjekFormular()
{
if (kontakt.fnavn.value==0)
{
alert("Indtast venligst dit fornavn");
return false;
}
return true;
}

der kaldes af

<form onsubmit="return tjekFormular()" id="kontakt" ...>

når formulares sendes uanset om der er indtastet
noget i feltet. Feltet har følgende udformning:
<input name="Fornavn" id="fnavn" type="text">

Formularen kan ses "live" uden validering på
http://733.dk/senior-pc/


--

Med venlig hilsen
Jørgen Farum Jensen
Håndbog i webdesign: http://webdesign101.dk/wwwbog/udgave2/
Webdesign med stylesheets: http://webdesign101.dk/cssbog/
..

 
 
Stig Johansen (20-03-2010)
Kommentar
Fra : Stig Johansen


Dato : 20-03-10 15:46

Jørgen Farum Jensen wrote:

> Hvad er der galt med denne funktion:
>
> function tjekFormular()
> {
> if (kontakt.fnavn.value==0)
> {
> alert("Indtast venligst dit fornavn");
> return false;
> }
> return true;
> }
>
> der kaldes af
>
> <form onsubmit="return tjekFormular()" id="kontakt" ...>
>
> når formulares sendes uanset om der er indtastet
> noget i feltet. Feltet har følgende udformning:
> <input name="Fornavn" id="fnavn" type="text">
>
> Formularen kan ses "live" uden validering på
> http://733.dk/senior-pc/

Det bedste er nok altid at bruge id'er, så prøv i stedet:
if (document.getElementById('fnavn').value < '!'' ) {
alert....

--
Med venlig hilsen
Stig Johansen

Birger Sørensen (20-03-2010)
Kommentar
Fra : Birger Sørensen


Dato : 20-03-10 16:32

Stig Johansen skrev:
8X
> Det bedste er nok altid at bruge id'er, så prøv i stedet:
> if (document.getElementById('fnavn').value < '!'' ) {
> alert....

eller
if ( document.getElementById( 'kontakt').value.length < 1 ) {
alert....

Birger

--
http://varmeretter.dk - billig, sund og hurtig mad
http://bbsorensen.dk



Birger Sørensen (20-03-2010)
Kommentar
Fra : Birger Sørensen


Dato : 20-03-10 16:39

Birger Sørensen udtrykte præcist:
> Stig Johansen skrev:
> 8X
>> Det bedste er nok altid at bruge id'er, så prøv i stedet:
>> if (document.getElementById('fnavn').value < '!'' ) {
>> alert....
>
> eller
> if ( document.getElementById( 'kontakt').value.length < 1 ) {
> alert....
>
> Birger

skal selvfølgelig være
if ( document.getElementById( 'fnavn').value.length < 1 ) {

Birger

--
http://varmeretter.dk - billig, sund og hurtig mad
http://bbsorensen.dk



Stig Johansen (20-03-2010)
Kommentar
Fra : Stig Johansen


Dato : 20-03-10 17:18

Birger Sørensen wrote:

> Birger Sørensen udtrykte præcist:
>> Stig Johansen skrev:
>> 8X
>>> Det bedste er nok altid at bruge id'er, så prøv i stedet:
>>> if (document.getElementById('fnavn').value < '!'' ) {
>>> alert....
>>
>> eller
>> if ( document.getElementById( 'kontakt').value.length < 1 ) {
>> alert....
>>
>> Birger
>
> skal selvfølgelig være
> if ( document.getElementById( 'fnavn').value.length < 1 ) {

Den med at bruge '!' er er gammelt høkertrick, da ! er det første tegn efter
blank.

Så hvis man taster en blank vil længden være 1, men stadig < !
alternativt kan man bruge noget trim hvis man føler for det.

--
Med venlig hilsen
Stig Johansen

Jørgen Farum Jensen (20-03-2010)
Kommentar
Fra : Jørgen Farum Jensen


Dato : 20-03-10 18:08

Stig Johansen skrev:

>>>> Det bedste er nok altid at bruge id'er, så prøv i stedet:
>>>> if (document.getElementById('fnavn').value < '!'' ) {
>>>> alert....

Der er lige et anførselstegn for meget... Men ellers
virker det.

<snip>
> Den med at bruge '!' er er gammelt høkertrick, da ! er det første tegn efter
> blank.
>
> Så hvis man taster en blank vil længden være 1, men stadig < !
> alternativt kan man bruge noget trim hvis man føler for det.
>

I like <'!' da den jo også frasorterer blanktegn.
Når mine hidtidige forsøg (value==0 eller value=="0")
ikke lykkes er det så fordi der passeres en ascii-værdi i
stedet for ingenting?

Under alle omstændigheder tak for hjælpen. Nu kan jeg
komme videre med formularprojektet.
--

Med venlig hilsen
Jørgen Farum Jensen
Håndbog i webdesign: http://webdesign101.dk/wwwbog/udgave2/
Webdesign med stylesheets: http://webdesign101.dk/cssbog/
..

Stig Johansen (20-03-2010)
Kommentar
Fra : Stig Johansen


Dato : 20-03-10 18:34

Jørgen Farum Jensen wrote:

> Stig Johansen skrev:
>
>>>>> Det bedste er nok altid at bruge id'er, så prøv i stedet:
>>>>> if (document.getElementById('fnavn').value < '!'' ) {
>>>>> alert....
>
> Der er lige et anførselstegn for meget... Men ellers
> virker det.

Mit keyboard er stået af, så jeg bruger et lettere defekt et.
Bla virker l-tasten ikke, så jeg må bruge copy/paste, og det kan give rigtig
sjove indæg, hvis jeg gemmer at indsætte 'et :)

> Når mine hidtidige forsøg (value==0 eller value=="0")

value er værdien, og ikke antallet af tegn.
Så den test går på om man har tastet 0 i feltet, så alt andet end 0, og kun
0. vil give en fej.

--
Med venlig hilsen
Stig Johansen

Jens Peter Karlsen (21-03-2010)
Kommentar
Fra : Jens Peter Karlsen


Dato : 21-03-10 01:27

Er du sikker på at det ikke er fordi den opfatter 0 som false?
Jeg er ikke sikker på om det gælder javascript men nogen
programmeringssprog opfatter en tom værdi som false så udtrykket
if(value==0) ville i så fald blive if(false==false).

Den korrekte måde at checke om en værdi er tom er:
if(!value)
Men ofte vil man alligevel checke for mere end et bogstav og der vil
man bruge:
if(value.lenght<antal)

On Sat, 20 Mar 2010 18:34:15 +0100, Stig Johansen <wopr.dk@gmail.com>
wrote:

>value er værdien, og ikke antallet af tegn.
>Så den test går på om man har tastet 0 i feltet, så alt andet end 0, og kun
>0. vil give en fej.

Stig Johansen (21-03-2010)
Kommentar
Fra : Stig Johansen


Dato : 21-03-10 11:16

Jørgen Farum Jensen wrote:

> Under alle omstændigheder tak for hjælpen. Nu kan jeg
> komme videre med formularprojektet.

Hvis du vil gøre det "lækkert" for dine brugere, så vi jeg foreslå dig at
lægge hvert felt på en linie for sig, og lave et "errorfield" i
forlængelse.

Intet er mere pisseirriterende end disse "alerts" (IMO).

Så i stedet for (gentagne) alerts, kan man vise et "errorfield" med teksten
"Dette felt skal udfyldes", og fremhævet med f.eks. rødt.

Samtidig kan man sætte background på den tilhørende inputbox til eks. rød,
så brugeren kan se hvor den er gal.

--
Med venlig hilsen
Stig Johansen

Jørgen Farum Jensen (21-03-2010)
Kommentar
Fra : Jørgen Farum Jensen


Dato : 21-03-10 12:21

Stig Johansen skrev:
> Jørgen Farum Jensen wrote:
>
>> Under alle omstændigheder tak for hjælpen. Nu kan jeg
>> komme videre med formularprojektet.
>
> Hvis du vil gøre det "lækkert" for dine brugere, så vi jeg foreslå dig at
> lægge hvert felt på en linie for sig, og lave et "errorfield" i
> forlængelse.

Eksempel please?
> Intet er mere pisseirriterende end disse "alerts" (IMO).

Det har du ret i, men det er altså den måde,
jeg indtil nu har kunnet finde ud af. Og den
der kan finde ud af at taste sit navn og
sit telefonnummer eller hvad det nu er, får
jo ikke nogen alertboks.

--
Med venlig hilsen

Jørgen Farum Jensen
..

Stig Johansen (21-03-2010)
Kommentar
Fra : Stig Johansen


Dato : 21-03-10 12:55

Jørgen Farum Jensen wrote:

> Eksempel please?

Hvorfor vidste jeg dette "krav" ville opstå?
(skulle nok ikke have foreslået det...)

>> Intet er mere pisseirriterende end disse "alerts" (IMO).
>
> Det har du ret i, men det er altså den måde,
> jeg indtil nu har kunnet finde ud af. Og den
> der kan finde ud af at taste sit navn og
> sit telefonnummer eller hvad det nu er, får
> jo ikke nogen alertboks.

Det er vi helt enige i, og det var også en generel betragtning.

Hvis du laver en konstruktion med f.eks. (overordnet)
<td>navn</td><td><input id=''../></td><td id='errfield1' class='error'></td>
osv med efternavn osv..

Så kan man under valideringen lave følgende i stedet for en alert:
if ("fejl.i.navn") {
document.getEementById('errfield1').innerHTM='Du skal udfylde navn';
returnvalue= false;
}

osv. med de resterende felter.

Starter du funktionen med
var returnvalue=true;
og sætter den til fase ved hvert tjek, og afslutter med
return returnvalue,
så kan du opnå, at der blliver givet fejl ved alle felter i stedet for
successive alerts.

Jeg vil godt lave et eksempel, men så må du levere html'et.

--
Med venlig hilsen
Stig Johansen

Birger Sørensen (21-03-2010)
Kommentar
Fra : Birger Sørensen


Dato : 21-03-10 14:32

Stig Johansen har bragt dette til verden:
> Jørgen Farum Jensen wrote:
8X
> Så kan man under valideringen lave følgende i stedet for en alert:
> if ("fejl.i.navn") {
> document.getEementById('errfield1').innerHTM='Du skal udfylde navn';
> returnvalue= false;
> }
>
> osv. med de resterende felter.
>
> Starter du funktionen med
> var returnvalue=true;
> og sætter den til fase ved hvert tjek, og afslutter med
> return returnvalue,
> så kan du opnå, at der blliver givet fejl ved alle felter i stedet for
> successive alerts.
>
> Jeg vil godt lave et eksempel, men så må du levere html'et.

Det er også muligt at indlejre fejltekster i HTML'en, i display:hidden
elementer - så skal "fejlfunktionen" blot vise/skjule det der er behov
for med display attributten, i stedet for at manipulere tekster,
hvilket - IMHO - er mere overskueligt.

Birger

--
http://varmeretter.dk - billig, sund og hurtig mad
http://bbsorensen.dk



Jørgen Farum Jensen (21-03-2010)
Kommentar
Fra : Jørgen Farum Jensen


Dato : 21-03-10 14:46

Birger Sørensen skrev:

>> Jeg vil godt lave et eksempel, men så må du levere html'et.

Tak for tilbuddet, men jeg holder mig nu til alert
indtil videre - hvis ikke:
> Det er også muligt at indlejre fejltekster i HTML'en, i display:hidden
> elementer - så skal "fejlfunktionen" blot vise/skjule det der er behov
> for med display attributten, i stedet for at manipulere tekster, hvilket
> - IMHO - er mere overskueligt.

Den metode bruger jeg i forvejen til at
vise forklarende tekster til feltetiketter,
der måske ikke er tilstrækkeligt sigende
i sig selv. Blot bruger jeg display:none
i stedet for display:hidden , der er
en ok værdi hvis det er visibility vi taler om .


--

Med venlig hilsen
Jørgen Farum Jensen
Håndbog i webdesign: http://webdesign101.dk/wwwbog/udgave2/
Webdesign med stylesheets: http://webdesign101.dk/cssbog/
..

Birger Sørensen (21-03-2010)
Kommentar
Fra : Birger Sørensen


Dato : 21-03-10 14:52

Jørgen Farum Jensen tastede følgende:
> Birger Sørensen skrev:
>
>>> Jeg vil godt lave et eksempel, men så må du levere html'et.
>
> Tak for tilbuddet, men jeg holder mig nu til alert
> indtil videre - hvis ikke:
>> Det er også muligt at indlejre fejltekster i HTML'en, i display:hidden
>> elementer - så skal "fejlfunktionen" blot vise/skjule det der er behov for
>> med display attributten, i stedet for at manipulere tekster, hvilket - IMHO
>> - er mere overskueligt.
>
> Den metode bruger jeg i forvejen til at
> vise forklarende tekster til feltetiketter,
> der måske ikke er tilstrækkeligt sigende
> i sig selv. Blot bruger jeg display:none
> i stedet for display:hidden , der er
> en ok værdi hvis det er visibility vi taler om .


Jeg lærer det aldrig... 8-o
Det er netop visiblity du skal bruge her.
Den gør at indholdet stadig tager plads i dit layout, men ikke vises.
Der er altså ikke chance for at en "fejltekst" vælter layoutet,
samtidig med at koden ikke junglerer rundt med diverse tekster, men
viser de elementer der er behov for i stedet.

Birger

--
http://varmeretter.dk - billig, sund og hurtig mad
http://bbsorensen.dk



Jørgen Farum Jensen (21-03-2010)
Kommentar
Fra : Jørgen Farum Jensen


Dato : 21-03-10 23:58

Birger Sørensen skrev:

> Jeg lærer det aldrig... 8-o
> Det er netop visiblity du skal bruge her.
> Den gør at indholdet stadig tager plads i dit layout, men ikke vises.
> Der er altså ikke chance for at en "fejltekst" vælter layoutet, samtidig
> med at koden ikke junglerer rundt med diverse tekster, men viser de
> elementer der er behov for i stedet.
>

Jeg er overhovedet ikke enig. Såvel visibility-
egenskaben som display-egenskaben er anvendelige
til at vise og skjule et element, hvid det skjulte
element er absolut positioneret og dermed placeres
oven på det øvrige indhold.

--

Med venlig hilsen
Jørgen Farum Jensen
Håndbog i webdesign: http://webdesign101.dk/wwwbog/udgave2/
Webdesign med stylesheets: http://webdesign101.dk/cssbog/
..

Birger Sørensen (22-03-2010)
Kommentar
Fra : Birger Sørensen


Dato : 22-03-10 01:49

Jørgen Farum Jensen formulerede spørgsmålet:
> Birger Sørensen skrev:
>
>> Jeg lærer det aldrig... 8-o
>> Det er netop visiblity du skal bruge her.
>> Den gør at indholdet stadig tager plads i dit layout, men ikke vises. Der
>> er altså ikke chance for at en "fejltekst" vælter layoutet, samtidig med at
>> koden ikke junglerer rundt med diverse tekster, men viser de elementer der
>> er behov for i stedet.
>>
>
> Jeg er overhovedet ikke enig. Såvel visibility-
> egenskaben som display-egenskaben er anvendelige
> til at vise og skjule et element, hvid det skjulte
> element er absolut positioneret og dermed placeres
> oven på det øvrige indhold.

Jeg havde nu lidt fat i Stigs forslag.
Hvis du bygger din form i en tabel (eller sætter den sammen med labels,
inputs og div/span til info) kan du fra starten indsætte din
fejlmeddelelse, men skjule den med visibility.
Så tager elementet plads i det normale flow, men vises ikke. Dit layout
ændres altså ikke, når/hvis fejlmeddelelsen skal vises.
Skjuler du elementet med display, tager det ikke del i det normale
flow, når det er skjult. Når/hvis du derefter viser det, risikerer du
derfor at layoutet ændres.
Absolut positionerede elementer deltager ikke i det normale flow, så
der er det vel ligegyldigt om man bruger den ene eller den anden.

Birger

--
http://varmeretter.dk - billig, sund og hurtig mad
http://bbsorensen.dk



Stig Johansen (21-03-2010)
Kommentar
Fra : Stig Johansen


Dato : 21-03-10 14:55

Birger Sørensen wrote:

> Det er også muligt at indlejre fejltekster i HTML'en, i display:hidden
> elementer - så skal "fejlfunktionen" blot vise/skjule det der er behov
> for med display attributten, i stedet for at manipulere tekster,
> hvilket - IMHO - er mere overskueligt.

Det har du ret i.
Da jeg skrev indlægget var mine tanker mere på serverside delen, hvor jeg
"plejer" at ordne den slags valideringer.

--
Med venlig hilsen
Stig Johansen

Birger Sørensen (21-03-2010)
Kommentar
Fra : Birger Sørensen


Dato : 21-03-10 15:44

Stig Johansen skrev:
> Birger Sørensen wrote:
>
>> Det er også muligt at indlejre fejltekster i HTML'en, i display:hidden
>> elementer - så skal "fejlfunktionen" blot vise/skjule det der er behov
>> for med display attributten, i stedet for at manipulere tekster,
>> hvilket - IMHO - er mere overskueligt.
>
> Det har du ret i.
> Da jeg skrev indlægget var mine tanker mere på serverside delen, hvor jeg
> "plejer" at ordne den slags valideringer.

Det gør jeg helst også.
Input skal under alle omstændigheder valideres serverside. Så der er
ikke rigtig nogen grund til også at gøre det clientside.
Det kan selvfølgelig spare lidt på den besøgendes båndbredde. Nu bruger
jeg ikke JQuery eller andre bb-storforbrugere, så jeg spilder den med
noget fornuftigt i stedet
Og som Jørgen skriver, er det jo kun dem der ikke kan skrive rigtigt
første gang, eller tror de kan nøjes med at udfylde halvdelen, man
generer. ^^

Birger

--
http://varmeretter.dk - billig, sund og hurtig mad
http://bbsorensen.dk



Stig Johansen (21-03-2010)
Kommentar
Fra : Stig Johansen


Dato : 21-03-10 16:38

Birger Sørensen wrote:

> Og som Jørgen skriver, er det jo kun dem der ikke kan skrive rigtigt
> første gang, eller tror de kan nøjes med at udfylde halvdelen, man
> generer. ^^

Ja, det er nok at skyde gråspurve med kanonkugler i det her tilfælde.
Som sagt tænkte jeg mere på nogle af de ting jeg har lavet, som
* kontonummer skal udfyldes
* kontonummer skal være 10 cifre
* kontonummer ej korrekt (modulus 11 kontrol)
....
og den slags, hvor de kan være flere fejmeldinger til hvert felt.

Alt skal selfølgelig valideres serverside, men hvis man fanger tastefejl
(som netop er formålet med modulus11(/10)), sparer man tid6, både for
bruger og båndbredde.

--
Med venlig hilsen
Stig Johansen

Jens Peter Karlsen (21-03-2010)
Kommentar
Fra : Jens Peter Karlsen


Dato : 21-03-10 17:56

Jo, det er altid rart at kunne påpege åbenlyse fejl uden unødigt at
lave et server kald.

Regards Jens Peter Karlsen.

On Sun, 21 Mar 2010 15:44:14 +0100, Birger Sørensen
<sdc@bbsorensen.com> wrote:

>Input skal under alle omstændigheder valideres serverside. Så der er
>ikke rigtig nogen grund til også at gøre det clientside.

DADK (24-03-2010)
Kommentar
Fra : DADK


Dato : 24-03-10 04:29

Jørgen Farum Jensen wrote:
> Hvad er der galt med denne funktion:
>
> function tjekFormular()
> {
> if (kontakt.fnavn.value==0)
> {
> alert("Indtast venligst dit fornavn");
> return false;
> }
> return true;
> }

den kan være hvad som helst, incl ingenting og

function tjekFormular() {
if ((kontakt.fnavn.value!="undefined') || (kontakt.fnavn.value!="')) {
return true;
}
alert("Indtast venligst dit fornavn");
}

men i dit tilfælde ville jeg nok skrive

if (kontakt.fnavn.value==="")




Søg
Reklame
Statistik
Spørgsmål : 177577
Tips : 31968
Nyheder : 719565
Indlæg : 6409071
Brugere : 218888

Månedens bedste
Årets bedste
Sidste års bedste