Ik ben bezig met het uitwerken van een grote formulier zodat het digitaal kan worden ingevuld. Omdat de vragen vaak kunnen veranderen sla ik deze vragen in een database, dat gedeelte werkt perfect. Alleen ik zit nu met het probleem dat er verschillende vragen zijn die pas hoeven worden getoond als er eerder bepaalde antwoorden zijn gegeven. Zoals "Was er sprake van contractbreuk?" Als er op deze antwoord Ja wordt gekozen (<select />) dan moet er één of meerdere vragen te voorschijn komen.
Nu zou je dit kunnen doen door na elke gekozen een post te doen, zodat er een nieuwe formulier wordt gegegeneerd. Alleen dit werkt niet echt fijn, het vertraagd alleen maar enorm. Vervolgens kwam ik met het idee om hiervoor JavaScript te gebruiken. Hierdoor kan je verschillende methoden gebruiken bijv. XMLHttpRequest, arrays. Nu vind ik het gebruik van XMLHttpRequest wat overdone hiervoor, zijn toch er extra post backs e.d. Nu kan je het ook in arrays opslaan maar ik vraag me af of dit wel netjes is, zo'n blok javascript op de pagina.
Ik had mijn code (formulier generatie gaat dmv. een XSLT file) al aangepast zodat ik gemakkelijke reen veld kan verbergen/weergeven dmv. de css attribute: display.
Mijn huidige plan is om een methode aan de onload-event te hangen van het venster, die de gehele html pagina doorloopt. Op zoek naar bepaalde class-waardes, hoewel "class"-attribuut hier eigenlijk niet bedoeld is lijkt het mij toch de beste methode. Maar goed als er nu een waarde in de class staat zoals "show-overige-by-OTHER". Dan zou dit moeten betekenen laat het veld "overige" zien wanneer het gekozen antwoord bij deze vraag OTHER is. Als het stukje JavaScript deze magie tegenkomt dan vervangt hij het door een onchange-event (via addEvent()?) met de correct code, dan wordt de vraag overige weergegeven.
Ik dacht vervolgens aan deze (psuedo) code:
Nu is mijn vraag alleen of zoiets nou de beste methode is, of dat er nog een betere methodes/oplossingen zijn voor dit probleem.
Nu zou je dit kunnen doen door na elke gekozen een post te doen, zodat er een nieuwe formulier wordt gegegeneerd. Alleen dit werkt niet echt fijn, het vertraagd alleen maar enorm. Vervolgens kwam ik met het idee om hiervoor JavaScript te gebruiken. Hierdoor kan je verschillende methoden gebruiken bijv. XMLHttpRequest, arrays. Nu vind ik het gebruik van XMLHttpRequest wat overdone hiervoor, zijn toch er extra post backs e.d. Nu kan je het ook in arrays opslaan maar ik vraag me af of dit wel netjes is, zo'n blok javascript op de pagina.
Ik had mijn code (formulier generatie gaat dmv. een XSLT file) al aangepast zodat ik gemakkelijke reen veld kan verbergen/weergeven dmv. de css attribute: display.
HTML:
1
2
3
4
5
| // mogelijk aanpassen naar een dd/dt manier <div id="f-overige"> <label for="overige">Overige</label> <input id="overige" name="overige" class="eInput " value="" /> </div> |
Mijn huidige plan is om een methode aan de onload-event te hangen van het venster, die de gehele html pagina doorloopt. Op zoek naar bepaalde class-waardes, hoewel "class"-attribuut hier eigenlijk niet bedoeld is lijkt het mij toch de beste methode. Maar goed als er nu een waarde in de class staat zoals "show-overige-by-OTHER". Dan zou dit moeten betekenen laat het veld "overige" zien wanneer het gekozen antwoord bij deze vraag OTHER is. Als het stukje JavaScript deze magie tegenkomt dan vervangt hij het door een onchange-event (via addEvent()?) met de correct code, dan wordt de vraag overige weergegeven.
Ik dacht vervolgens aan deze (psuedo) code:
JavaScript:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
| function fieldChangeEventHandler( sRelevantField, sFieldValue ) { formField = this; sRelevantField = document.getElementById ( 'f-' + sRelevantField ); if ( !sRelevantField ) return false; if ( formField.nodeName == "select" ) { for ( var i=0; i < formField.options.length; i++ ) { sOptionValue = formField.options[ i ]; if ( sOptionValue == sFieldValue ) { sRelevantField.style.display = 'block[s][/s]'; } else { // not selected --- keep it hidden sRelevantField.style.display = 'hidden'; } } } else if ( formField.nodeName == "input" { // do stuff } } |
Nu is mijn vraag alleen of zoiets nou de beste methode is, of dat er nog een betere methodes/oplossingen zijn voor dit probleem.