[js] reeks opdrachten onderbreken

Pagina: 1
Acties:

  • Sabbath
  • Registratie: Juli 2001
  • Laatst online: 21-08 17:58
Ik heb een paar functie's om velden te valideren, die allemaal ongeveer hier op lijken:
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
function ckDomeinNaam(be) {
  if (form1.domein_naam.value == "") {
    if (be==0) {
    form1.pic_domein_naam.src='nix.gif'
    }
    if (be==1) {
      alert("U Bent vergeten een domein naam in te vullen.");
    }
  }
  else {
    if(form1.domein_naam.value.search(/^[A-Za-z0-9]*[-_]*[A-Za-z0-9]+$/)!=-1) {
      if (be==0) {
        form1.pic_domein_naam.src='goed.gif'
    }
    }
    else {
      if (be==0) {
      form1.pic_domein_naam.src='nix.gif'
      }
      if (be==1) {
        alert("U hebt een ongeldige domein naam in gevult.");
      }
    }
  }
}

En ik valideer op 2 manieren.
1. zodra het vakje is ingevult dmv een onChange event. (de variable "be" krijgt dan "0" mee)
2. Als er op de "submit" knop gedrukt wordt. (de variable "be" krijgt dan "1" mee)

Mijn submit knop ziet er zo uit:
code:
1
<input type="submit" name="aktie" value="Verder" onClick="this.form.action='resultaat.php';this.form.submit();ckDomeinNaam(1);ckbedrijf(1);ckAdres(1);ckpostcode(1);ckplaats(1);ckbankrek(1);cktnv(1);ckplaats_1(1);ckkvk_no(1);ckcon_voor(1);ckcon_achter(1);ckcon_tel(1);ckcon_mail(1)">

maar als er nu op de submit knop wordt gedrukt, krijg je inderdaad de alert schermpjes, van de niet (en fout) ingevoerde velden. Maar als je bv. 3dingen niet hebt ingevuld, krijg je 3alert boxjes, en vervolgens gaat ie toch gewoon door naar resultaat.php.

Is er een manier om dat te onderbreken?? Dat hij dus als er een fout inzit op de een of andere manier stopt?

  • prototype
  • Registratie: Juni 2001
  • Niet online

prototype

Cheer Bear

return false; ?

  • Croccifixio
  • Registratie: Maart 2002
  • Laatst online: 01-04-2025
Ik heb ook eens een keer zoiets gemaakt. Na elke alert had ik het volgende staan en dat werkte:
code:
1
2
event.returnValue=false;
return;

Het eerste om te zorgen dat de post niet plaatsvindt en het tweede om de verdere uitvoering af te kappen.

  • Sabbath
  • Registratie: Juli 2001
  • Laatst online: 21-08 17:58
Op donderdag 30 mei 2002 18:44 schreef prototype het volgende:
return false; ?
Dat had ik al geprobeerd, werkt niet.
Op donderdag 30 mei 2002 18:46 schreef -TheGrimReaper- het volgende:
Ik heb ook eens een keer zoiets gemaakt. Na elke alert had ik het volgende staan en dat werkte:
code:
1
2
event.returnValue=false;
return;

Het eerste om te zorgen dat de post niet plaatsvindt en het tweede om de verdere uitvoering af te kappen.
Dit werkt ook niet, Hij gaat gewoon door.

[edit]
Hij komt nu alleen op een lege resultaat.php :) Hij post dus wel, maar hij voert het script in resultaat.php niet uit.
{/edit]

  • Croccifixio
  • Registratie: Maart 2002
  • Laatst online: 01-04-2025
Hhhmmm....is het een FORM waar je al die gegevens moet invullen, volgens mij wel toch?

Dan moet je dat action spul in het action attribuut gooien en je javascript spul in de onSubmit handler van het FORM.

edit:
[quote]
Hij komt nu alleen op een lege resultaat.php Hij post dus wel, maar hij voert het script in resultaat.php niet uit.
[/quote]

Klopt, je moet dus eerst je javascript de velden langs laten gaan en daarna pas je resultaat.php de submit functie aanroepen.
Nu is het zo dat het form gesubmit wordt en daarna worden de velden pas gecontroleerd. Te laat dus.

En het is trouwens mooier en korter om al die aanroepen om de velden te controleren in 1 aanroep te doen en in die functie alle velden langs te gaan.

  • Sabbath
  • Registratie: Juli 2001
  • Laatst online: 21-08 17:58
Op donderdag 30 mei 2002 19:06 schreef -TheGrimReaper- het volgende:
Hhhmmm....is het een FORM waar je al die gegevens moet invullen, volgens mij wel toch?
Ja
Dan moet je dat action spul in het action attribuut gooien en je javascript spul in de onSubmit handler van het FORM.
Hoe bedoel je dat?
[edit]
[..]

Klopt, je moet dus eerst je javascript de velden langs laten gaan en daarna pas je resultaat.php aanroepen.
En hoe moet ik dat doen dan?
En het is trouwens mooier en korter om al die aanroepen om de velden te controleren in 1 aanroep te doen en in die functie alle velden langs te gaan.
[/edit]
Weet ik, maar omdat ik meteen controleer als een vakje verandert word, leek dit me handiger.

  • Croccifixio
  • Registratie: Maart 2002
  • Laatst online: 01-04-2025
Je FORM tag:
code:
1
<form name="invulForm" method="post" action="resultaat.php" onSubmit="checkForm();">

En mijn javascript functie (was een heel kort opdrachtje voor een vak):
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
27
28
29
30
31
32
<script language="JavaScript">
function checkForm()
{
    var invulNaam=invulForm.naam.value;
    if (invulNaam=='') 
    {
        alert('Je bent vergeten je naam in te vullen!');
        event.returnValue=false;
        return;
    }
    var invulStudienummer = invulForm.studienummer.value;   
    if (invulStudienummer == '') 
    {
        alert('Je bent vergeten je studienummer in te vullen!');
        event.returnValue=false;
        return;
    }
    var invulGetal = parseInt(invulStudienummer);
    if (isNaN(invulGetal)) 
    {
        alert('Je moet een getal invullen bij je studienummer!');
        event.returnValue=false;
        return;
    }
    if (invulStudienummer.length != 7) 
    {
        alert('Een studienummer heeft 7 cijfers!');
        event.returnValue=false;
        return;
    }
}
</script>

  • Sabbath
  • Registratie: Juli 2001
  • Laatst online: 21-08 17:58
Op donderdag 30 mei 2002 19:18 schreef -TheGrimReaper- het volgende:
Je FORM tag:
code:
1
<form name="invulForm" method="post" action="resultaat.php" onSubmit="checkForm();">
Dat werkt dus niet, want ik heb selectieboxjes, die met een onChange event de pagina ook posten, maar dan naar zichzelf. snap je? "action" is dus elke keer anders. Een onSubmit kan ik ook niet instellen, want ik heb een php scriptje die een "andere" submit knop maakt als je bijvoorbeeld een boxje op "Particulier" zet. Dit omdat iemand die Particulier is geen kvk nummer hoeft op te geven.

Als die niet opgegeven word, dan kan hij die dus ook niet controleren. want dan krijg je altijd een error dat ie leeg is.

edit:
Ik zat nog te denken het met een this.form.onSubmit='ckDomeinNaam(1);ckbedrijf(1);ckAdres(1);ckpostcode(1);ckplaats(1);ckbankrek(1);cktnv(1);ckplaats_1(1);ckkvk_no(1);ckcon_voor(1);ckcon_achter(1);ckcon_tel(1);ckcon_mail(1);' te doen, maar hoe zorg ik ervoor dat die uit gevoerd word?

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

crisp

Devver

Pixelated

Gewoon heel simpel gezegt moet je false returnen op het onSubmit event:
code:
1
<form blaatieblaat onSubmit="return checkform()">

Je checkform functie kan er dan zo uitzien:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
function checkform() {

  if (blaat != piep) {
    alert('voudt!');
    return false;
  }
  if (boeh != bah) {
    alert('nog een voudt!');
    return false;
  }

  //alle checks gepasseerd!
  return true;

}

Intentionally left blank


  • Croccifixio
  • Registratie: Maart 2002
  • Laatst online: 01-04-2025
lama.....eff nog een keer goed lezen

  • Bosmonster
  • Registratie: Juni 2001
  • Laatst online: 29-08 19:47

Bosmonster

*zucht*

Luister naar crisp, das de enige juiste methode voor een form-validator.

In andere situaties kan ik namelijk gewoon gezellig javascript:form.submit() in de adresbalk typen en je validator omzeilen..

  • Sabbath
  • Registratie: Juli 2001
  • Laatst online: 21-08 17:58
Op donderdag 30 mei 2002 19:44 schreef crisp het volgende:
Gewoon heel simpel gezegt moet je false returnen op het onSubmit event:
code:
1
<form blaatieblaat onSubmit="return checkform()">

Je checkform functie kan er dan zo uitzien:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
function checkform() {

  if (blaat != piep) {
    alert('voudt!');
    return false;
  }
  if (boeh != bah) {
    alert('nog een voudt!');
    return false;
  }

  //alle checks gepasseerd!
  return true;

}
Maar dat kan dus niet, want mijn checkform ziet er steeds anders uit. Omdat een Particulier geen kvk nummer hoeft in te voeren, en hij die dus alleen maar hoeft te checken als het een zakelijke aanvraag betreft.

  • Croccifixio
  • Registratie: Maart 2002
  • Laatst online: 01-04-2025
edit:
Ik zat nog te denken het met een this.form.onSubmit='ckDomeinNaam(1);ckbedrijf(1);ckAdres(1);ckpostcode(1);ckplaats(1);ckbankrek(1);cktnv(1);ckplaats_1(1);ckkvk_no(1);ckcon_voor(1);ckcon_achter(1);ckcon_tel(1);ckcon_mail(1);' te doen, maar hoe zorg ik ervoor dat die uit gevoerd word?
OK, dan zou ik deze regel javascript in het onLoad event van je doc zetten. Deze regel kan je dan eventueel ook nog dynamisch laten aanpassen door je php in geval van particuliere of zakelijke gebruikers.

Na het aanroepen van je alerts:
code:
1
event.returnValue=false; // annuleer de submit actie

Misschien kan je het stoppen van het verschijnen van je volgende alerts ook wel oplossen door een globale variabele aan te maken die je op 'false' zet als een veld niet is ingevuld. Bij het aanroepen van de functie die een veld controleert, kan je testen op het 'false' zijn hiervan. Is dit het geval dan doe je niks. En anders controleer je het veld.

  • Sabbath
  • Registratie: Juli 2001
  • Laatst online: 21-08 17:58
Op donderdag 30 mei 2002 19:58 schreef -TheGrimReaper- het volgende:

[..]

OK, dan zou ik deze regel javascript in het onLoad event van je doc zetten. Deze regel kan je dan eventueel ook nog dynamisch laten aanpassen door je php in geval van particuliere of zakelijke gebruikers.
Heb ik gedaan:
PHP:
1
<?if ($type == "" AND $SoortBetaal == "") {print ("<body onLoad=\"form1.onSubmit='ckDomeinNaam(1);ckbedrijf(1);ckAdres(1);ckpostcode(1);ckplaats(1);ckbankrek(1);cktnv(1);ckplaats_1(1);ckkvk_no(1);ckcon_voor(1);ckcon_achter(1);ckcon_tel(1);ckcon_mail(1);'\">");}?>

Stukje output:
code:
1
2
3
<body onLoad="form1.onSubmit='ckDomeinNaam(1);ckbedrijf(1);ckAdres(1);ckpostcode(1);ckplaats(1);ckbankrek(1);cktnv(1);ckplaats_1(1);ckkvk_no(1);ckcon_voor(1);ckcon_achter(1);ckcon_tel(1);ckcon_mail(1);'"> 

  <form name="form1" method="post" action="" onSubmit="">

Hij zet dus de code wel in de onload, maar hij laad hem niet. ??

(En het duurde zo lang omdat ik een ; was vergeten... grmbl.. :D)

  • Croccifixio
  • Registratie: Maart 2002
  • Laatst online: 01-04-2025
Ik zou het action attribuut en het onSubmit event weghalen uit de form-tag als je die toch niet daar gebruikt.
Misschien dat je met het onsubmit attribuut je 'form.onSubmit = ' weer reset ??

  • Sabbath
  • Registratie: Juli 2001
  • Laatst online: 21-08 17:58
Op donderdag 30 mei 2002 20:32 schreef -TheGrimReaper- het volgende:
Ik zou het action attribuut en het onSubmit event weghalen uit de form-tag als je die toch niet daar gebruikt.
Misschien dat je met het onsubmit attribuut je 'form.onSubmit = ' weer reset ??
Nee, werkt ook niet. :'(

  • Sabbath
  • Registratie: Juli 2001
  • Laatst online: 21-08 17:58
dom dom dom!!!

Ik heb het nu zo :)
PHP:
1
<?if ($type == "" AND $SoortBetaal == "") {print ("<form name=\"form1\" method=\"post\" action=\"\" onSubmit='ckDomeinNaam(1);ckbedrijf(1);ckAdres(1);ckpostcode(1);ckplaats(1);ckbankrek(1);cktnv(1);ckplaats_1(1);ckkvk_no(1);ckcon_voor(1);ckcon_achter(1);ckcon_tel(1);ckcon_mail(1);'>");}?>

En dat werkt dus wel :) Nu de rest nog..

edit:

Als ik dit heb:
[code]onSubmit='return ckDomeinNaam(1);[/code]
Dan stopt ie na dat alert boxje wel met het uitvoeren van de popup schermpjes, maar hij gaat wel nog steeds naar resultaat.php ??

[edit2]
Als ik dit:
code:
1
<form name="form1" method="post" action="" onSubmit="false">

intype gaat ie overigens ook gewoon door naar resultaat.php
[/edit2]

  • Croccifixio
  • Registratie: Maart 2002
  • Laatst online: 01-04-2025
Volgens mij had ik die oplossing al een aantal posts geleden gegeven. Maakt niet uit, ben blij dat het werkt.

Ik zou proberen om het volgende te doen met de 'return':
[code]return(<alle functies>)[/code]
Ik hoop dat het binnen de haakjes als een OR werkt.


Werkt niet bij nader inzien. Ik denk dat alleen de laatste waarde nu bepaalt wat er terug wordt gegeven.
edit2
Heb je die
code:
1
event.returnValue = false;

wel erbij gezet?

  • Sabbath
  • Registratie: Juli 2001
  • Laatst online: 21-08 17:58
Op donderdag 30 mei 2002 21:49 schreef -TheGrimReaper- het volgende:
Volgens mij had ik die oplossing al een aantal posts geleden gegeven. Maakt niet uit, ben blij dat het werkt.

Ik zou proberen om het volgende te doen met de 'return':
[code]return(<alle functies>)[/code]
Ik hoop dat het binnen de haakjes als een OR werkt.


Werkt niet bij nader inzien. Ik denk dat alleen de laatste waarde nu bepaalt wat er terug wordt gegeven.
Ja, je zei dat ik die in die onSubmit moest zetten via de onload, maar nu schrijf ik hem meteen weg als <form enz.> :p

Maar goed, het werkt dus nog steeds niet, hij gaat nog steeds door naar resultaat.php :(

edit:
Ja, klopt, maar ook dat werkt dus niet (zie boven) hij gaat gewoon door, zelfs als ik er meteen onSubmit="false" neer zet.

  • Sabbath
  • Registratie: Juli 2001
  • Laatst online: 21-08 17:58
Heb je die
code:
1
event.returnValue = false;

wel erbij gezet?
Ja, en ook geprobeerd met alleen return false;

  • Sabbath
  • Registratie: Juli 2001
  • Laatst online: 21-08 17:58
Hey!! Hij doet het in een keer :D :D

harstikke mooi, mischien krijg ik het dan toch nog vanavond af :)

Heel heel heel heel heel erg bedankt voor jullie (vooral -TheGrimReaper-'s) hulp!

  • Croccifixio
  • Registratie: Maart 2002
  • Laatst online: 01-04-2025
Tja, ik neem aan dat je resultaat.php nog steeds als onClick event hebt staan bij die submit knop?
Kennelijk pakt 'ie eerst die handler en gaat 'ie daarna pas de event handler van de onSubmit uitvoeren van het form.
Je moet zorgen dat dit omgedraaid wordt.


Geen dank, graag gedaan.

Maarre, kan je nog eff laten zien hoe je het precies gedaan hebt?

  • Sabbath
  • Registratie: Juli 2001
  • Laatst online: 21-08 17:58
Nou, het is nog niet af :) Ik moet er dus wel 1 function van maken, want meerdere functie's ondersteunt die onSubmit niet.

Maar ik heb:

functie:
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
27
function ckDomeinNaam(be) {
  if (form1.domein_naam.value == "") {
    if (be==0) {
    form1.pic_domein_naam.src='nix.gif'
    }
    if (be==1) {
      alert("U Bent vergeten een domein naam in te vullen.");
    return false;
    }
  }
  else {
    if(form1.domein_naam.value.search(/^[A-Za-z0-9]*[-_]*[A-Za-z0-9]+$/)!=-1) {
      if (be==0) {
        form1.pic_domein_naam.src='goed.gif'
    }
    }
    else {
      if (be==0) {
      form1.pic_domein_naam.src='nix.gif'
      }
      if (be==1) {
        alert("U hebt een ongeldige domein naam in gevult.");
      return false;
      }
    }
  }
}

formulier:
PHP:
1
<?if ($type == "" AND $SoortBetaal == "") {print ("<form name=\"form1\" method=\"post\" action=\"\" onSubmit=\"return ckDomeinNaam(1);return ckbedrijf(1);return ckAdres(1);return ckpostcode(1);return ckplaats(1);return ckbankrek(1);return cktnv(1);return ckplaats_1(1);return ckkvk_no(1);return ckcon_voor(1);return ckcon_achter(1);return ckcon_tel(1);return ckcon_mail(1);\">");}?>

Domein naam invoer vakje:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
    <td width="320" height="2">
        <font size="1" face="Verdana, Arial, Helvetica, sans-serif">
          <b>Gewenste domeinnaam:</b>
        </font>
      </td>
      <td width="10" height="2">
        <font size="1" face="Verdana, Arial, Helvetica, sans-serif">
          <p align="right">www.</p>
        </font>
      </td>
    <td height="2" width="298">
    <font size="1" face="Verdana, Arial, Helvetica, sans-serif"> 
    <?php
    print ("<input type=\"text\" name=\"domein_naam\" size=\"19\" maxlength=\"100\" value=\"$domein_naam\" onchange=\"ckDomeinNaam(0)\">");
    $naam = "dotwat";
    $opties = array('.nl', '.info', '.uk', '.com', '.name', '.ca', '.net', '.tv', '.cc', '.org', '.biz', '.us');
    $selectedvar = $dotwat;
      $ververs = "0";
      Dropbox($naam, $opties, $selectedvar, $ververs);    
      ?>
      </font></td>
      <td>[img]"nix.gif">
    [/img]

Submit knop:
code:
1
<input type="submit" name="aktie" value"Verder" onClick="this.form.action='resultaat.php'">

Volgens mij is dit alles !?

  • SchizoDuckie
  • Registratie: April 2001
  • Laatst online: 18-02-2025

SchizoDuckie

Kwaak

waarom gebruik je geen while constructie,

while waarde
loop functies af
(eind van de functie while op false uiteraard)

zo zou het moeten kunnen lijkt me

Stop uploading passwords to Github!


  • Bosmonster
  • Registratie: Juni 2001
  • Laatst online: 29-08 19:47

Bosmonster

*zucht*

Tis ook heel simpel.. als je alle checks in losse functies zet die allemaal true/false returnen, kun je heel makkelijk door je velden heenlopen, de validators zelf hergebruikend.
Pagina: 1