Toon posts:

[javascript] formulier controle en setTimeout probleem

Pagina: 1
Acties:
  • 595 views sinds 30-01-2008
  • Reageer

Verwijderd

Topicstarter
Ik heb echt gezocht, maar kon helaas geen bruikbare informatie vinden.

Ik wil dus waarden controleren in een formulier.
Deze moeten allemaal goedgekeurd worden voordat het formulier verzonden mag worden.

PHP:
1
var continueform = new Boolean(false);


Tevens houd ik bij welke velden zijn gevalideerd
PHP:
1
2
3
4
var validated       = new Array();
validated['land']   = new Boolean(false);
validated['adres']  = new Boolean(false);
validated['plaats'] = new Boolean(false);


Dan is er een functie welke continueform bijhoudt:
PHP:
1
2
3
4
5
6
7
8
9
function errorHandling(){
    if(validated['land']==false||
       validated['adres']==false||
       validated['plaats']==false){
        continueform = false;
    }else{
        continueform = true;
    }
}


En dan zijn er nog de functies:
- checkLand --> validated['land'] true of false
- checkAdres --> validated['adres'] true of false
- checkPlaats --> validated['plaats'] true of false

Als ik nu op submit click dan wordt het volgende uitgevoerd:
PHP:
1
2
3
4
5
6
7
8
9
10
11
function valideerAdres(){
    setTimeout('checkLand()',250);
    setTimeout('checkAdres()',500);
    setTimeout('checkPlaats()',750);
    setTimeout('errorHandling()',1000); // variabele continueform bijwerken 
    if(continueform==false){
        return false;
    }else{
        return true;
    }
}


De timeouts gebruik ik zodat alle velden netjes achter elkaar gecontroleerd worden.
Maar wat blijkt: voordat deze timeouts worden uitgevoerd, wordt de if...then...else lus al uitgevoerd en wordt dus direct het formulier al dan niet verstuurd.
Stel dat ik gewoon netjes alles heb ingevuld, dan wordt het formulier dus niet verstuurd omdat continueform nog op false staat.
Nu kan ik wel met onblur alles regelen, maar er zitten ook standaard pulldowns in die standaard een goede waarde hebben.

Eerst moet dus alles gecontroleerd worden en dan moet aan de hand van continueform het formulier wel of niet worden gesubmit.

Helaas kan ik ook niet setTimeout('return continueform', 2500) gebruiken.
Want setTimeout heeft een functie nodig.

Hoe kan ik dit nu eens oplossen?!

  • André
  • Registratie: Maart 2002
  • Laatst online: 08-04 16:23

André

Analytics dude

Doe het dan bijvoorbeeld zo:
code:
1
2
3
4
5
6
7
function valideerAdres()
{
  if (checkLand() && checkAdres() && checkPlaats() && errorHandling())
  {
    if (continueform == false) { return false; } else { return true; }
  }
}

Die hele constructie met setTimeouts snap ik niet, dat is nergens voor nodig.

Edit:
Je kunt trouwens ook gewoon 1 variabele validated bijhouden, zodra 1 niet is gevalideerd zet je hem op false en submit je niet.

[ Voor 19% gewijzigd door André op 06-02-2006 14:21 ]


Verwijderd

Ik snap het even niet; die timeOuts zorgen er juist voor dat het niet netjes achter elkaar wordt gecontroleerd. Waarom gebruik je die?

Verwijderd

Topicstarter
als ik die timeouts niet gebruik, controleert ie alles tegelijkertijd (die controles maken gebruik van Ajax en tonen een plaatje per veld dat aangeeft dat de controle bezig is)

  • crisp
  • Registratie: Februari 2000
  • Laatst online: 00:22

crisp

Devver

Pixelated

Verwijderd schreef op maandag 06 februari 2006 @ 14:26:
als ik die timeouts niet gebruik, controleert ie alles tegelijkertijd (die controles maken gebruik van Ajax en tonen een plaatje per veld dat aangeeft dat de controle bezig is)
Dan zal je de default submit moeten cancellen en uiteindelijk na alle validaties met javascript het form moeten submitten.

Note overigens dat timeout-values niet precies zijn; beter is om een volgende timeout pas te zetten vanuit de vorige functie:

JavaScript:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
setTimeout('functie1()', 250);

function functie1()
{
  // doe iets
  setTimeout('functie2()', 250);
}

function functie2()
{
  // doe iets
  setTimeout('errorHandling()', 250);
}

function errorHandling()
{
  if (validated['land'] == false ||
      validated['adres'] == false ||
      validated['plaats'] == false)
  {
    document.forms['id_van_mijn_form'].submit();
  }
}

Intentionally left blank


  • André
  • Registratie: Maart 2002
  • Laatst online: 08-04 16:23

André

Analytics dude

Verwijderd schreef op maandag 06 februari 2006 @ 14:26:
als ik die timeouts niet gebruik, controleert ie alles tegelijkertijd (die controles maken gebruik van Ajax en tonen een plaatje per veld dat aangeeft dat de controle bezig is)
Dus je gaat clientside zaken controleren met onnodige vertraging? Volgens mij kun je beter het hele formulier submitten en serverside de echte controle doen. Eventueel wat kleine js controles vooraf.

Verwijderd

Topicstarter
@André: vertraging is nauwelijks sprake van en ja er zitten wat controles is die ik al clientside wil doen. maar goed: wat maakt dat uit?

@crisp: bedankt voor de tip, daar ga ik mee aan de slag!

  • TukkerTweaker
  • Registratie: November 2001
  • Laatst online: 10-04 15:40
Verwijderd schreef op maandag 06 februari 2006 @ 14:50:
vertraging is nauwelijks sprake van en ja er zitten wat controles is die ik al clientside wil doen. maar goed: wat maakt dat uit?
Meer foutgevoeliger, je bent van de onbekende client (browser) afhankelijk.

Verwijderd

Topicstarter
Het is een intern systeem dus de browser is bekend

  • cyberstalker
  • Registratie: September 2005
  • Niet online

cyberstalker

Eersteklas beunhaas

Verwijderd schreef op maandag 06 februari 2006 @ 16:20:
Het is een intern systeem dus de browser is bekend
Dan nog komt het wat onzinnig over. Clientside checks zijn handig als je bijvoorbeeld op een bepaald formaat wilt controleren, voor bijvoorbeeld email-adressen e.d.

Op jouw manier gebruik je vier requests waar je met één afkan.

Ik ontken het bestaan van IE.


  • BtM909
  • Registratie: Juni 2000
  • Niet online

BtM909

Watch out Guys...

cyberstalker schreef op maandag 06 februari 2006 @ 17:24:
[...]

Dan nog komt het wat onzinnig over. Clientside checks zijn handig als je bijvoorbeeld op een bepaald formaat wilt controleren, voor bijvoorbeeld email-adressen e.d.

Op jouw manier gebruik je vier requests waar je met één afkan.
MWa, wellicht is TS een beetje omslachtig bezig, maar ik kan me heel goed voorstellen om aparte requests te gebruiken per veld :)

Ace of Base vs Charli XCX - All That She Boom Claps (RMT) | Clean Bandit vs Galantis - I'd Rather Be You (RMT)
You've moved up on my notch-list. You have 1 notch
I have a black belt in Kung Flu.


Verwijderd

Topicstarter
Ik was idd een beetje omslachtig bezig, en heb het nu wat in kunnen korten.
De timeouts had ik er ook in gezet om de gebruiker 'heeeel even' te kunnen laten genieten van de 'voortgangsindicatoren' :)

Soms zit je door het proberen en testen te ver in de materie en zie je door de bomen het bos niet meer. Terwijl even opnieuw beginnen erg verhelderend kan zijn!
Pagina: 1