Waar gaat het fout?

Status
Niet open voor verdere reacties.

peps03

Gebruiker
Lid geworden
20 nov 2009
Berichten
93
Hoi,

Al dagen zit ik te worstelen met het volgende. Ik heb een form validatie in javascript, opzich gaat de validatie goed, via onsubmit. Maar wanneer ik de velden leeg laat krijgt ik wel de melding in beeld dat het vak ingevuld moet worden, maar het formulier wordt toch verzonden!

Dit is de code die ik gebruik:
[js]
function validate_required(field,alerttxt) {
with (field) {
if (value==null||value=="") {
alert(alerttxt);
return false;
} else {
return true;
}
}
}

function validate_email(field,alerttxt) {
with (field) {
apos=value.indexOf("@")
dotpos=value.lastIndexOf(".")
if (apos<1||dotpos-apos<2) {
alert(alerttxt);
return false;
} else {
return true;
}
}
}

function validate_form(thisform) {
with (thisform) {
if (validate_required(Voornaam,"Vul aub uw voornaam in.")==false)
{name.focus();return false;}
if (validate_required(Achternaam,"Vul aub uw achternaam in.")==false)
{name.focus();return false;}
if (validate_required(Telefoonnummer,"Vul aub uw telefoonnummer in.")==false)
{name.focus();return false;}
if (validate_required(Email,"Vul aub een e-mailadres in.")==false)
{email.focus();return false;}
if (validate_email(Email,"Vul aub een geldig e-mailadres in.")==false)
{email.focus();return false;}
}
}
[/js]
Alvast bedankt!
 
Laatst bewerkt door een moderator:
Nou, eerst even een paar puntjes:
1. 'with()' wordt afgeraden, maargoed, indeze constructie kan het geen kwaad
2. schrijf echt je functies met indents (3 of 4 spaties of een tab); dat vergroot je leesbaarheid EN makkelijker fouten opsporen!
3. 'value == null || value == ""' is niet echt nuttig geloof ik, alleen '' doet t m wel
4. duik eens in regex; dat is een stuk handiger voor validatie

5. vergeet niet dat je ALTIJD server-site moet controleren, ook na een client-side controle zoals dit! Iemand kan bv. javascript uit hebben staan etc.​
ik krijg verder deze warning van mn firefox-console:
Warning: function validate_form does not always return a value
Source File: file:///test.html
Line: 57
Source Code:
}
(57 is de laatste ' } ' )
Als je je functies nou eerst eens netjes opschrijft:
[JS]function validate_required(field,alerttxt)
{
with (field)
{
if(value == "")
{
alert(alerttxt);
return false;
}else{
return true;
}
}
}[/JS][JS]

function validate_email(field,alerttxt)
{
with (field)
{
var apos = value.indexOf("@");
var dotpos = value.lastIndexOf(".");

if(apos < 1 || (dotpos - apos) < 2)
{
alert(alerttxt);
return false;
}else{
return true;
}
}
}[/JS][JS]

function validate_form(thisform)
{
with(thisform)
{
if(validate_required(Voornaam,"Vul aub uw voornaam in.") == false)
{
name.focus();
return false;
}
if(validate_required(Achternaam,"Vul aub uw achternaam in.") == false)
{
name.focus();
return false;
}
if(validate_required(Telefoonnummer,"Vul aub uw telefoonnummer in.") == false)
{
name.focus();
return false;
}
if(validate_required(Email,"Vul aub een e-mailadres in.") == false)
{
email.focus();
return false;
}
if(validate_email(Email,"Vul aub een geldig e-mailadres in.") == false)
{
email.focus();
return false;
}
}
}[/JS]goed, naar je probleem:
1. ik zie 3x 'naam.focus()' staan, ook bij telefoonnummer, moet dit niet verbeterd worden? Verder roep je je email functie 2x aan, je kan de normale validatie weglaten voor email, de validate_email functie doet dit al.
2. zoals je ziet zegt de console al dat je vergeet een waarde te returnen! Na al je 'if' gevallen in je validate_forum fucntie, (return false's dus) doe je niets meer. Na de laatste if moet dus zeker een 'return true'!
3. voor de zekerheid kan je dan DAARONDER een return false zetten, mocht JS je form niet kunnen vinden met het 'with()' gedeelte. Zoiets dus:​
[JS]function validate_form(thisform)
{
with(thisform)
{
if(validate_required(Voornaam,"Vul aub uw voornaam in.") == false)
{
name.focus();
return false;
}
if(validate_required(Achternaam,"Vul aub uw achternaam in.") == false)
{
name.focus();
return false;
}
if(validate_required(Telefoonnummer,"Vul aub uw telefoonnummer in.") == false)
{
name.focus();
return false;
}
if(validate_required(Email,"Vul aub een e-mailadres in.") == false)
{
email.focus();
return false;
}
if(validate_email(Email,"Vul aub een geldig e-mailadres in.") == false)
{
email.focus();
return false;
}

//alles is ingevuld, return true
return true;
}
//with() werd overgeslagen! omg! return false
return false;
}[/JS]


:thumb:
 
Vegras,

Heel hartelijk bedankt! Hij doet het nu! Het ging fout omdat ik de focus verkeerd had staan. Helemaal overheen gekeken.

En inderdaad, het leest makkelijker met meer spaties en enters!

Nogmaals bedankt.

Groet!
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan