Ga naar inhoud

JavaScript: MC-quiz, controle op antwoord


anoniem

Aanbevolen berichten

Hallo,

Ik wil met JavaScript controleren of een gebruiker een vraag beantwoord heeft. Het antwoord zelf is niet belangrijk, dat gebeurt met PHP en gaat prima. Alles wat ik hier wil is voorkomen dat iemand door de vragen springt zonder ze te maken. Omdat ik de functie niet telkens wil aanpassen aan de hand van de elementen, wil ik één functie die alle form-elements aankan. Alles komt in 1 form, want meerdere forms controleren lukt me niet goed, en geeft bekende problemen in Netscape. In de body staat een form met b.v. twee groepen checkboxes, NAME chk1 en chk2. Ook nog twee radiogroups, NAME rad1 en rad2. Aantal opties per groep verschilt.

In de header heb ik volgende functie geplaatst:

function MyInput() { var MyForm = document.forms[0]; for (var i=0; i<(MyForm.elements.length); i++) { var MyElem = MyForm.elements[i]; if (MyElem.name.indexOf('rad')>=0) { (MyElem.checked)? alert('rad'): alert('no rad'); } if (MyElem.name.indexOf('chk')>=0) { (MyElem.checked)? alert('chk'): alert('no chk'); } } }

Wat hij doet, is per optie aangeven of deze geselecteerd is, en dat wil ik niet. Ik snap wat hierboven staat, maar na twee dagen proberen weet ik niet meer hoe ik dit kan aanpassen zodat hij alleen kijkt OF er iets is ingevuld per groep (hoeft niet per se goed te zijn). Diverse pogingen waren onsuccesvol, graag jullie hulp.

Grtz,

Pieter

Link naar reactie
Het script hierboven is een deel uit het totale script; ik wil nog andere dingen controleren (en dát kan ik alleen in JavaScript), en afhankelijk van het resultaat gebruik ik een return om de gegevens al dan niet naar de server te sturen. Ik ben bang dat het geheel erg langzaam wordt als ik alles via de server ga doen. Tussen (): eerlijk gezegd zou ik ook niet direct weten hoe ik dit in PHP moet programmeren, ik ben er nog niet zo lang mee bezig en hoe meer geautomatiseerd, hoe lastiger. JavaScript heb ik meer ervaring mee.

Grtz,

Pieter (mooi?? ;-) )

Link naar reactie
Misschien kan je hier iets mee:

<script language="JavaScript"><!-- // Antwoordmogelijkheden per vraag. antw1=4; antw2=2; antw3=3; antw4=5; // De rest van het script. teller=0; function controleer() { frm=document.forms[0]; for(i=0;i<antw1;i++){ if(frm.elements[i].checked){ teller++; break;}} for(i=antw1;i<(antw1+antw2);i++){ if(frm.elements[i].checked){ teller++; break;}} for(i=(antw1+antw2);i<(antw1+antw2+antw3);i++){ if(frm.elements[i].checked){ teller++; break;}} for(i=(antw1+antw2+antw3);i<(antw1+antw2+antw3+antw4);i++){ if(frm.elements[i].checked){ teller++; break;}} if(teller<4){ alert('Niet alle vragen zijn beantwoord'); teller=0;} else{ alert('Alle vragen zijn beantwoord'); teller=0; } } //--></script>

<form> <input type="checkbox">Vraag 1 keuze 1<br> <input type="checkbox">Vraag 1 keuze 2<br> <input type="checkbox">Vraag 1 keuze 3<br> <input type="checkbox">Vraag 1 keuze 4<br> <hr> <input type="checkbox">Vraag 2 keuze 1<br> <input type="checkbox">Vraag 2 keuze 2<br> <hr> <input type="radio" name="rad1">Vraag 3 keuze 1<br> <input type="radio" name="rad1">Vraag 3 keuze 2<br> <input type="radio" name="rad1">Vraag 3 keuze 3<br> <hr> <input type="radio" name="rad2">Vraag 4 keuze 1<br> <input type="radio" name="rad2">Vraag 4 keuze 2<br> <input type="radio" name="rad2">Vraag 4 keuze 3<br> <input type="radio" name="rad2">Vraag 4 keuze 4<br> <input type="radio" name="rad2">Vraag 4 keuze 5<br> <hr> <input type="button" value="Check" onclick="controleer()"> </form>

Link naar reactie
Zo, na de familiefondue van gisteravond kan ik gelukkig weer gewoon aan het werk :smile:. Bedankt voor het voorbeeldscript, alleen wil ik graag iets hebben dat standaard te gebruiken is. Ik kan ook wel diverse extra parameters doorgeven vanuit de functie-aanroep, maar dat wil ik zo min mogelijk. Dus het aantal vragen per keer nodig hebben in het script is dan lastig, bovendien moet ik het aantal script-lines aanpassen per vraag. Werkt misschien wel, maar is te omslachtig (ik heb ooit eens gelezen dat een goede programmeur lui is, en ik wil telkens beter worden :wink: ).

Bill: Wat mijn bedoeling is, is om te checken alvorens ik de gegevens doorstuur naar de server. Maar als ik het breder moet formuleren: ik wil voorkomen dat iemand mijn vragen niet maakt, maar direct naar de antwoorden gaat kijken ("eerst zelf nadenken", zei de juffrouw). Naast de gegevens van de form-elements zit er ook nog een drag&drop-interactie in, gemaakt met de Coursebuilder-plugin van Dreamweaver. Ik heb de code dusdanig ontcijferd dat ik alleen het benodigde deel in mijn functie kan aanroepen om te kijken of de drags op een target gedropped zijn, maar ik weet niet hoe dit in PHP zou moeten omdat ik dan moet gaan uitzoeken hoe ik die uitkomst als variabelen moet meegeven.

Grtz,

NewYearMan

Link naar reactie
Oké dan... ik maak een medisch-educatieve webpagina over neurologie, waar studenten de verschillende baansystemen in het ruggenmerg op de goede plek moeten slepen (d&d), en er vervolgens nog wat vraagjes over krijgen. Momenteel alleen als <SELECT>, en daar kan ik ook makkelijk kijken of iemand een antwoord invult, want als eerste optie kies ik <SELECT value="dummy" selected> en dan werkt een lusje met document.forms[0].elements[i].value=='dummy' prima. Alleen zit ik met het probleem dat bijv (jawel, bijles :wink: ) je achterstrengen zowel info over tastzin als vibratiezin doorgeven, en daar heb ik nu een vrij omslachtige oplossing voor. Momenteel maak ik twee SELECT's, die ik in PHP vrij omslachtig moet checken (de eerste mag OF tast OF vibratie zijn, de tweede ook, en afhankelijk daarvan moet ik mijn feedback opbouwen). Toen wilde ik de selects vervangen door een multiple select, of evt checkboxes/radiobuttons, en dook dit probleem op.

Iets anders, wat me ook zou kunnen helpen, is als je me een methode kunt vertellen dat je door op een optie uit een select-list te klikken, deze kunt toevoegen aan een lijstje, en dat je vervolgens het lijstje met gekozen opties selecteert. Klinkt misschien wat vaag, maar hopelijk kom je er verder mee. Ik wil de pagina zo opzetten dat ook digibeten ermee uit de voeten kunnen, dus bv Ctrl inhouden voor een multiple-select gaat me al te ver.

Capice?

Link naar reactie

Om een reactie te plaatsen, moet je eerst inloggen

Gast
Reageer op dit topic

×   Geplakt als verrijkte tekst.   Herstel opmaak

  Er zijn maximaal 75 emoji toegestaan.

×   Je link werd automatisch ingevoegd.   Tonen als normale link

×   Je vorige inhoud werd hersteld.   Leeg de tekstverwerker

×   Je kunt afbeeldingen niet direct plakken. Upload of voeg afbeeldingen vanaf een URL in

  • Populaire leden

    Er is nog niemand die deze week reputatie heeft ontvangen.

  • Leden

    Geen leden om te tonen

×
  • Nieuwe aanmaken...