Bij deze wil ik graag eens een discussie opstarten over de beste manier om een implementatie te schrijven voor een formulier dat in verschillende stappen gegevens van een gebruiker verzamelt. Als forum heb ik voor Programming gekozen, aangezien het niet specifiek gaat om clientside of serverside, maar om een combinatie van beide kanten. Ik denk ook dat de discussie zich niet per se zou moeten beperken tot één bepaalde serverside programmeertaal, aangezien het meer een conceptuele vraag is, dan een specifieke implementatie.
Als minimale vereisten voor een gebruikersvriendelijke en toegankelijke afhandeling, kan ik het volgende verzinnen:
Tot nu toe heb ik dat steeds opgelost door middel van JavaScript. In het formulier wordt de huidige stap opgeslagen en een "increment" value, die aangeeft of het formulier een stap héén of een stap terug moet zetten. Zowel de "vorige" als "volgende" knop zijn submit-buttons. Wanneer de "volgende" knop wordt ingedrukt, wordt het formulier zonder verdere JavaScript-interventie verzonden. In het formulier worden dan voor de stappenregistratie de volgende twee variabelen meegegeven:
De serverside weet dan de huidige stap en of er vooruit of terug gestapt wordt. Wanneer de terug-knop wordt ingedrukt, wordt middels JavaScript eerst de "incr" waarde op '-1' gezet, vervolgens wordt het formulier gesubmit. De server weet dan dat er een stap teruggezet moet worden.
Zoals in mijn wensen/eisen-lijstje neergezet, lijkt het me beter om de basale functionaliteit niet te baseren op JavaScript-functionaliteit.
Ik ben benieuwd naar de oplossingen die jullie hiervoor gevonden hebben. Ik vermoed dat vrijwel iedere webbouwer hiermee te maken heeft gekregen.
Als minimale vereisten voor een gebruikersvriendelijke en toegankelijke afhandeling, kan ik het volgende verzinnen:
- De formulier-verwerking moet aan de clientside werken met alle browsers en mag niet afhankelijk zijn van JavaScript; eventuele (unobtrusive) usability-enhancements (JS/AJAX/etc.) zijn optioneel.
- Bij iedere stap in het formulier moet aan de kant van de server validation plaats vinden
- Wanneer een veld niet of niet correct ingevuld is, moet de gebruiker daarover specifieke feedback krijgen.
- Wanneer een stap niet correct ingevuld is, moet hetzelfde formulier (dezelfde stap) nogmaals getoond worden, waarbij alle reeds ingevulde gegevens opnieuw getoond moeten worden.
- De gebruiker moet in de procedure stappen vooruit en stappen terug kunnen zetten; alleen bij een stap vooruit moet validatie plaatsvinden.
- Ook bij stappen terug moet eventueel ingevulde informatie behouden blijven.
- Afhankelijk van ingevulde informatie moet eventueel een stap in het proces overgeslagen kunnen worden. Die stap moet dan zowel bij vooruit stappen als bij achteruit stappen overgeslagen worden.
- De basale browser-usability (enter=standaard form-submit, etc.) mag niet worden aangetast.
Tot nu toe heb ik dat steeds opgelost door middel van JavaScript. In het formulier wordt de huidige stap opgeslagen en een "increment" value, die aangeeft of het formulier een stap héén of een stap terug moet zetten. Zowel de "vorige" als "volgende" knop zijn submit-buttons. Wanneer de "volgende" knop wordt ingedrukt, wordt het formulier zonder verdere JavaScript-interventie verzonden. In het formulier worden dan voor de stappenregistratie de volgende twee variabelen meegegeven:
HTML:
1
2
| <input type='hidden' name='step' value={huidige stap} /> <input type='hidden' name='incr' value=1 /> |
De serverside weet dan de huidige stap en of er vooruit of terug gestapt wordt. Wanneer de terug-knop wordt ingedrukt, wordt middels JavaScript eerst de "incr" waarde op '-1' gezet, vervolgens wordt het formulier gesubmit. De server weet dan dat er een stap teruggezet moet worden.
Zoals in mijn wensen/eisen-lijstje neergezet, lijkt het me beter om de basale functionaliteit niet te baseren op JavaScript-functionaliteit.
Ik ben benieuwd naar de oplossingen die jullie hiervoor gevonden hebben. Ik vermoed dat vrijwel iedere webbouwer hiermee te maken heeft gekregen.