Avatar billede knowman Juniormester
08. februar 2004 - 17:14 Der er 9 kommentarer og
1 løsning

Fordele et antal point mellem forskellige spørgsmål i spørgeskema

Hvor opnår jeg flg. funktionalitet:
Et webspørgeskema er inddelt i 5 grupper á 9 spørgsmål. Brugeren skal fordele 10 point mellem spørgsmålene indenfor hver gruppe. Jeg tænker at lave 5x9 array, som indeholder pointene. Men hvordan får jeg selve funktionaliteten med at fordele pointene på den smarteste måde? Jeg forestiller mig, at hver gruppe har sin egen skærmside, så man skal fordele pointene for en gruppe, og så springe videre til næste side. Men maskinen skulle jo gerne holde styr på at man fordeler alle 10 point (noget med at der står en "tæller" for hver gruppe).
Så der er to ting i det:
1. Hvordan får jeg sådan en tæller, som reguleres, når der indtastes point til hvert spørgsmål
2. Hvordan får jeg dataene med over, når brugeren skifter mellem html-siderne i spørgeskemaet? Arrayet skal jo bruges til sidst, til at udregne resultatet af testen, og give feedback til brugeren.
Avatar billede roenving Novice
08. februar 2004 - 20:03 #1
Lav ikke sideskift, men skift synlighed !-)

Opret fra start et array med de forskellige sider, test ved side- (synligheds-) skift, at de er valide, og vis så den næste sektion, en kort eksemplificering:

<form>
<div id="sektion1" style="display:block;">
Svar 1: <input type="text" name="svar1_1">
Svar 2: <input type="text" name="svar1_2">
Svar 3: <input type="text" name="svar1_3">
Svar 4: <input type="text" name="svar1_4">
Svar 5: <input type="text" name="svar1_5">
Svar 6: <input type="text" name="svar1_6">
Svar 7: <input type="text" name="svar1_7">
Svar 8: <input type="text" name="svar1_8">
Svar 9: <input type="text" name="svar1_9">
<button onclick="skiftSide(1)">
</div>
<div id="sektion2" style="display:none;">
Svar 1: <input type="text" name="svar2_1">
Svar 2: <input type="text" name="svar2_2">
Svar 3: <input type="text" name="svar2_3">
Svar 4: <input type="text" name="svar2_4">
Svar 5: <input type="text" name="svar2_5">
Svar 6: <input type="text" name="svar2_6">
Svar 7: <input type="text" name="svar2_7">
Svar 8: <input type="text" name="svar2_8">
Svar 9: <input type="text" name="svar2_9">
<button onclick="skiftSide(2)">
</div>

<!-- de andre sektioner
...
-->

</form>

<script type="text/javascript">
function skiftSide(n){
  var points = 0;
  for(i=1;10>i;i++){
    points += +document.forms[0].elements['svar'+n+'_'+i].value;
  }
  if(points!=10){
    alert('Points skal være ialt 10 for denne sektion');
    document.forms[0].elements['svar'+n+'_'+i].focus();
    return;
  }else if(n<5){
    document.getElæementById('sektion'+n).style.display='none';
    document.getElæementById('sektion'+(n+1)).style.display='block';
  }else{
    document.forms[0].submit();
  }
}

</script>
Avatar billede knowman Juniormester
10. februar 2004 - 17:05 #2
Gider du ikke lige sende mig det som svar, så jeg kan give dig nogle point?
Avatar billede roenving Novice
10. februar 2004 - 17:08 #3
Velbekomme '-)
Avatar billede knowman Juniormester
10. februar 2004 - 17:09 #4
Der var åbenbart en kommentar fra mig, som forsvandt. Nå, men jeg synes at din løsning er ganske genial. Tænk, bare at kunne ryste sådan noget ud af ærmet! Jeg har brugt din løsning, og det fungerer perfekt, efter at jeg har brugt en del tid på at taste variabelnavnene ind, og endnu mere på at debugge en irriterende fejl, hvor jeg havde lavet en fejl i netop ét af variabelnavnene.

Et enkelt spørgsmål: Kunne man ikke med fordel have anvendt et array til at gemme svarene i, i stedet for dette hav af individuelt navngivne variabler, og på den måde reduceret arbejdet og fejlrisikoen ved de seperate variabelnavne?
Avatar billede roenving Novice
10. februar 2004 - 17:43 #5
Problemet med arrays er, at javascript ikke genkender dem som arrays, hvis de er skrevet som arrays (dvs. svar[1][1]), og database-scripts genkender dem ikke som arrays, hvis der blot er flere af dem (dvs. svar, svar osv., som html og javascript vil genkende som arrays, dvs. svar[0], svar[1] osv. !-)

Så på den ene eller andet måde kommer man ind i noget tricky noget, for javascript mod noget sådant kan sagtens lade sig gøre, men så er det kodningen, som er hammer-besværlig ...
Avatar billede knowman Juniormester
10. februar 2004 - 18:18 #6
OK, men det virker jo også fint, som det er nu.

På baggrund af de svar, som indtastes, beregnes et resultat (det er en personlighedstest), med noget output, som skal vises. Vil du anbefale at vise dette resultat på tilsvarende vis, i en sektion8? Og behøver jeg overhovedet at submit()'e formen, når jeg bare skal bruge indholdet af felterne til videre Javascript-beregninger?
Avatar billede roenving Novice
10. februar 2004 - 18:24 #7
Næh, ikke medmindre du har brug for at sikre, at det virker under alle omstændigheder ...

-- for hvis javascript er slået fra (hvilket det er på en del skoler og biblioteker samt nogle større virksomheder, hvor de ikke kan kende forskel på et gangbræt og en Storebæltsbro med tilhørende tunnel !-), vil der jo ikke ske noget undervejs ...
Avatar billede roenving Novice
10. februar 2004 - 18:25 #8
-- og selvfølgelig: Ja, vis du bare resultatet i en sektion 8, den kan jo vises, når du er færdig med at beregne resultatet og har fyldt det i felter der !-)
Avatar billede roenving Novice
15. april 2004 - 00:20 #9
-- og tak for points ;~}
Avatar billede knowman Juniormester
15. april 2004 - 04:38 #10
Ja, undskyld, jeg havde helt svedt det ud, men opdagede nu, at jeg havde glemt det. Mange tak for hjælpen!
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester