Toon posts:

[javascript]form validation werkt niet

Pagina: 1
Acties:

Verwijderd

Topicstarter
Hallo,
Ik ben een beetje een noob met javascript en kom er echt niet meer uit. Ik heb de volgende code om te kijken of de extensie goed is:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
<script type="text/javascript">
function validate()
{
toegestaan = new Array("mid","jpg","gif","bmp")

bestandsnaam = document.upload.upload.value
extensie = bestandsnaam.substr(bestandsnaam.length-3,3)
validate = 0
for (i = 0; i < toegestaan.length; i++){
    if(extensie == toegestaan[i]){
        validate = 1
    }
}

if (validate == 0)
    alert("Deze extensie(" + extensie + ") is niet bruikbaar voor mobiele telefoons.")
    return false
}
</script>

Deze wordt aangeroepen door onsubmit="return validate()" in de <form>. Nu werkt het script voor 1 klik. Klik je daarna nog een keer op de submit knop dan slikt ie alles....

Iemand een idee wat ik fout doe?

  • Bosmonster
  • Registratie: Juni 2001
  • Laatst online: 10-05 18:53

Bosmonster

*zucht*

Ooit gedacht aan extenties van 4 letters zoals jpeg?

Betere manier om extenties te achterhalen is splitten op . (punt) en dan de laatste uit de verzameling te nemen,

Overigens gaat het fout door je validate variabele.. deze blijft op 1 en wordt nergens gereset.... (neem aan dat je naar een ander frame/window post ofzo dat het uberhaupt zo werkt :?)

En Javascript hoort in Webdesign & Graphics uiteraard :P

[ Voor 22% gewijzigd door Bosmonster op 08-12-2004 22:30 ]


  • NMe
  • Registratie: Februari 2004
  • Laatst online: 21:24

NMe

Quia Ego Sic Dico.

Bosmonster schreef op woensdag 08 december 2004 @ 22:29:
Ooit gedacht aan extenties van 4 letters zoals jpeg?

Betere manier om extenties te achterhalen is splitten op . (punt) en dan de laatste uit de verzameling te nemen,

Overigens gaat het fout door je validate variabele.. deze blijft op 1 en wordt nergens gereset.... (neem aan dat je naar een ander frame/window post ofzo dat het uberhaupt zo werkt :?)
En regel 8 dan?

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


Verwijderd

code:
1
2
3
if (validate == 0)
    alert("Deze extensie(" + extensie + ") is niet bruikbaar voor mobiele telefoons.")
    return false


Ik zie geen accolades om dit if statement staan, dus deze functie geeft volgens mij altijd false terug

[ Voor 7% gewijzigd door Verwijderd op 08-12-2004 22:35 ]


  • crisp
  • Registratie: Februari 2000
  • Laatst online: 23:35

crisp

Devver

Pixelated

--> Webdesign & Graphics

en warhead5 is right ;)

statements afsluiten met een ;, en je variabelen declareren met het 'var' keyword is trouwens ook good practice. dot-notatie daarentegen is evil...
Het is trouwens ook netjes om als je eenmaal de extensie in je array gevonden hebt uit je loop te springen mbv break, of om meteen return true te doen.
En verder wat Bosmonster zei natuurlijk :)

[ Voor 92% gewijzigd door crisp op 08-12-2004 22:39 ]

Intentionally left blank


Verwijderd

volgens mij gaat het fout omdat je een functie en een variabele met dezelfde naam hebt (namelijk validate), dat mag niet

  • crisp
  • Registratie: Februari 2000
  • Laatst online: 23:35

crisp

Devver

Pixelated

Verwijderd schreef op woensdag 08 december 2004 @ 22:39:
volgens mij gaat het fout omdat je een functie en een variabele met dezelfde naam hebt (namelijk validate), dat mag niet
Dat kan prima, maar niet als je die variabele global maakt. Door het niet netjes lokaal declareren wordt hij inderdaad global en overschrijft het functie-object. Dat is dus inderdaad het 2e grote probleem met deze functie buiten dat hij altijd false retourneert. Scherp! :)

Intentionally left blank


Verwijderd

bij mij returnt ie niet altijd false:

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
<script type="text/javascript">
function f_validate(bestandsnaam)
{
toegestaan = new Array("mid","jpg","gif","bmp")

//bestandsnaam = document.upload.upload.value
extensie = bestandsnaam.substr(bestandsnaam.length-3,3)
validate = 0
for (i = 0; i < toegestaan.length; i++){
    if(extensie == toegestaan[i]){
        validate = 1
    }
}

if (validate == 0)
    alert("Deze extensie(" + extensie + ") is niet bruikbaar voor mobiele telefoons.")
    return false
}
</script>

<script>
f_validate('aaa');
f_validate('jpg');
f_validate('aaa');
f_validate('jpg');
</script>

  • crisp
  • Registratie: Februari 2000
  • Laatst online: 23:35

crisp

Devver

Pixelated

woe: hoe maak je die returnvalue dan zichtbaar?
Probeer het zo eens:
JavaScript:
1
2
3
4
alert(f_validate('aaa'));
alert(f_validate('jpg'));
alert(f_validate('aaa'));
alert(f_validate('jpg'));

ik denk dat je dan toch wel een aantal keer 'false' ge-alert krijgt ;)

Intentionally left blank


Verwijderd

je hoeft geen alert te programmeren, dat doet de functie zelf al.
Je krijgt in mijn voorbeeld 2x een alert dat de extentie niet is toegestaan, de 2x jpg wordt dus wel toegestaan

  • Wolfboy
  • Registratie: Januari 2001
  • Niet online

Wolfboy

ubi dubium ibi libertas

crisp schreef op woensdag 08 december 2004 @ 22:46:
woe: hoe maak je die returnvalue dan zichtbaar?
Je maakt een leesfoutje, die return value hoort bij de functie, niet bij de if.
De functie geeft idd altijd false terug, maar dat maakt niet uit.
Het doel van de functie is om een alert te geven als het niet goed is en anders gewoon niets te doen.

offtopic:
in plaats van: bestandsnaam.substr(bestandsnaam.length-3,3)
kan je ook: bestandsnaam.substr(-3);
gebruiken :)


JavaScript:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
<script type="text/javascript">
function f_validate(bestandsnaam){
  toegestaan = new Array("mid","jpg","gif","bmp")

  //bestandsnaam = document.upload.upload.value
  extensie = bestandsnaam.substr(bestandsnaam.length-3,3)
  validate = 0
  for (i = 0; i < toegestaan.length; i++){
    if(extensie == toegestaan[i]){
      validate = 1
    }
  }

  if (validate == 0){
    alert("Deze extensie(" + extensie + ") is niet bruikbaar voor mobiele telefoons.")
  }

  return false
}
</script>

Zo duidelijker?

[ Voor 40% gewijzigd door Wolfboy op 08-12-2004 22:59 ]

Blog [Stackoverflow] [LinkedIn]


  • crisp
  • Registratie: Februari 2000
  • Laatst online: 23:35

crisp

Devver

Pixelated

Wolfboy schreef op woensdag 08 december 2004 @ 22:57:
[...]
Je maakt een leesfoutje, die return value hoort bij de functie, niet bij de if.
De functie geeft idd altijd false terug, maar dat maakt niet uit.
Het doel van de functie is om een alert te geven als het niet goed is en anders gewoon niets te doen.
Het maakt wel degelijk uit als je iets doet met de returnvalue, een actie cancellen bijvoorbeeld. In dit geval zou een bepaalde actie (bijvoorbeeld het posten van een formulier) dan dus altijd gecancelled worden ongeacht of hij door de check heenkomt.
Als je niets doet met een returnvalue, zet dan ueberhaupt geen return in je functie.
offtopic:
in plaats van: bestandsnaam.substr(bestandsnaam.length-3,3)
kan je ook: bestandsnaam.substr(-3);
gebruiken :)
Probeer dit eens in IE:
JavaScript:
1
alert('blaat.gif'.substr(-3));

;)

Intentionally left blank


Verwijderd

Topicstarter
Thx voor de tips nu werkt het script :)

Weten jullie nog een site met een goede functie overview van javascript? Zoals bij php www.php.net is?

Dat het script split bij de punt is idd practischer bij bijv jpeg files.

edit: dat substr(-3) werkt niet echt..
Wat crisp ook zegt :)

[ Voor 13% gewijzigd door Verwijderd op 08-12-2004 23:18 ]


  • crisp
  • Registratie: Februari 2000
  • Laatst online: 23:35

crisp

Devver

Pixelated

Hier nog 2 alternatieven verpakt in een werkend voorbeeld:
JavaScript:
1
2
3
4
5
6
7
8
9
function f_validate(bestandsnaam)
{
    var re = /\.(mid|jpg|jpeg|gif|bmp)$/;
    if (re.test(bestandsnaam)) return true;

    var extension = bestandsnaam.substring(bestandsnaam.lastIndexOf('.')+1);
    alert('Deze extensie (' + extension + ') is niet bruikbaar voor mobiele telefoons.');
    return false;
}

:)

Intentionally left blank


  • Wolfboy
  • Registratie: Januari 2001
  • Niet online

Wolfboy

ubi dubium ibi libertas

crisp schreef op woensdag 08 december 2004 @ 23:07:
Probeer dit eens in IE:
JavaScript:
1
alert('blaat.gif'.substr(-3));

;)
Oeps, alleen in FF getest O-)

En ik had idd niet gedacht aan hoe het formpje zou reageren op return false :P

Blog [Stackoverflow] [LinkedIn]

Pagina: 1