Avatar billede gybe Nybegynder
16. april 2007 - 16:26 Der er 7 kommentarer

Hvilket svar er der flest af?

Hej :)

I en multiple choice kan brugeren for hvert spørgsmål svare enten A, B eller C. Afhængig af hvilket svar der er flest af, bliver brugeren sendt til enten frame 1, 2 eller 3.
Brugerens besvarelse kan f.eks. se således ud:

Sp. 1: B
Sp. 2: B
Sp. 3: C
Sp. 4: A
Sp. 5: B
Sp. 6: A

Til hvert spørgsmål er tilknyttet en variabel, dvs. ovenstående giver følgende værdier: sp1=B, sp2=B, sp3=C, sp4=A, sp5=B, sp6=A.

Hvordan evaluerer jeg de seks variabler, for at nå frem til, om der er flest besvarelser for A, B eller C?
Avatar billede roenving Novice
17. april 2007 - 02:15 #1
Check ?-)

Hvornår sker det, skal brugeren have en besked før submit eller ...
Avatar billede gybe Nybegynder
17. april 2007 - 08:53 #2
Nej, ingen besked. Når brugeren har besvaret alle spørgsmål, klikkes der submit, hvorefter vedkommende sendes til enten frame 1, 2 eller 3 afhængigt af om der er flest A-, B- eller C-besvarelser. Dvs. sammentællingen sker f.eks. ved klik på submit-knappen.

Har jeg nogen nytte af at smide besvarelserne i et array? Ja, jeg er muligvis lidt smådum - til gengæld er min logiske tankegang også kørt fast :)
Avatar billede roenving Novice
18. april 2007 - 01:11 #3
-- hvornår kommer der noget i de variabler og hvordan ...

-- det virker ret ligegyldigt at have en stribe ubrugelige variable, er det ikke smartere at bruge et array el. lign. ?-)
Avatar billede gybe Nybegynder
19. april 2007 - 10:32 #4
Der kommer noget i variablerne når brugeren klikker på et at de tre svar i et spørgsmål, dvs. hvis brugeren klikker på B i spørgsmål 1, får sp1 ved klik på svaret værdien "B". Der er tre svarmuligheder for hvert spørgsmål som fungerer som radio buttons, dvs. hvis brugeren efterfølgende vælger at svare A i stedet for B i spørgsmål 1, ændres variablen sp1 til værdien "A".

Jo, det kan godt tænkes, at det er smartere med et array :) Hvordan ville dette i så fald sættes op smartest? Det eneste jeg har brug for er at tælle besvarelserne sammen for at nå frem til om der er flest A'er, B'er eller C'er.
Avatar billede roenving Novice
19. april 2007 - 15:46 #5
F.eks.

<script type="text/javascript">
var svar = [];
function taelSvar(f){
  var talte = [];
  talte["A"] = 0;
  talte["B"] = 0;
  talte["C"] = 0;
  for(i=1,im=svar.length;im>i;i++){
    talte[svar[i]]++;
  }
  f.action += "?A=" + talte["A"] + "&B=" + talte["B"] + "&C=" + talte["C"]
}
</script>

<form ... onsubmit="taelSvar(this);">

...<br>

<input type="radio" name="sp1" value="A" onclick="svar[this.name.substring(2)]=this.value;">A --
<input type="radio" name="sp1" value="B" onclick="svar[this.name.substring(2)]=this.value;">B --
<input type="radio" name="sp1" value="C" onclick="svar[this.name.substring(2)]=this.value;">C -- <br>

<input type="radio" name="sp2" value="A" onclick="svar[this.name.substring(2)]=this.value;">A --
<input type="radio" name="sp2" value="B" onclick="svar[this.name.substring(2)]=this.value;">B --
<input type="radio" name="sp2" value="C" onclick="svar[this.name.substring(2)]=this.value;">C -- <br>

<input type="radio" name="sp3" value="A" onclick="svar[this.name.substring(2)]=this.value;">A --
<input type="radio" name="sp3" value="B" onclick="svar[this.name.substring(2)]=this.value;">B --
<input type="radio" name="sp3" value="C" onclick="svar[this.name.substring(2)]=this.value;">C -- <br>

<input type="radio" name="sp4" value="A" onclick="svar[this.name.substring(2)]=this.value;">A --
<input type="radio" name="sp4" value="B" onclick="svar[this.name.substring(2)]=this.value;">B --
<input type="radio" name="sp4" value="C" onclick="svar[this.name.substring(2)]=this.value;">C -- <br>

<input type="radio" name="sp5" value="A" onclick="svar[this.name.substring(2)]=this.value;">A --
<input type="radio" name="sp5" value="B" onclick="svar[this.name.substring(2)]=this.value;">B --
<input type="radio" name="sp5" value="C" onclick="svar[this.name.substring(2)]=this.value;">C -- <br>

<input type="radio" name="sp6" value="A" onclick="svar[this.name.substring(2)]=this.value;">A --
<input type="radio" name="sp6" value="B" onclick="svar[this.name.substring(2)]=this.value;">B --
<input type="radio" name="sp6" value="C" onclick="svar[this.name.substring(2)]=this.value;">C -- <br>

<input type="radio" name="sp7" value="A" onclick="svar[this.name.substring(2)]=this.value;">A --
<input type="radio" name="sp7" value="B" onclick="svar[this.name.substring(2)]=this.value;">B --
<input type="radio" name="sp7" value="C" onclick="svar[this.name.substring(2)]=this.value;">C -- <br>

<input type="radio" name="sp8" value="A" onclick="svar[this.name.substring(2)]=this.value;">A --
<input type="radio" name="sp8" value="B" onclick="svar[this.name.substring(2)]=this.value;">B --
<input type="radio" name="sp8" value="C" onclick="svar[this.name.substring(2)]=this.value;">C -- <br>

<input type="radio" name="sp9" value="A" onclick="svar[this.name.substring(2)]=this.value;">A --
<input type="radio" name="sp9" value="B" onclick="svar[this.name.substring(2)]=this.value;">B --
<input type="radio" name="sp9" value="C" onclick="svar[this.name.substring(2)]=this.value;">C --

<input type="submit">
</form>

-- det vil så være naturligt også at bygge noget validering ind !-)
Avatar billede gybe Nybegynder
22. april 2007 - 13:33 #6
Mange tak for det gode eksempel! Jeg ser dog først nu, at mit spørgsmål ligger i kategorien JavaScript og ikke ActionScript, som er det jeg arbejder i - jeg er ellers ret sikker på at jeg valgte ActionScript...

Anyway, jeg har kunnet overføre principperne i dit eksempel til mit ActionScript, og det fungerer fint. Det sidste jeg nu mangler - og som jeg umiddelbart ikke kan gennemskue - er, at returnere det svar, der er flest af (altså A, B eller C). Ovenstående giver mig jo et array med f.eks. A=2, B=4, C=3. Hvis jeg sorterer arrayet sker det ud fra A, B og C, og altså ikke disses værdier, som er det jeg har brug for?

Vedlæg i øvrigt svar :)
Avatar billede roenving Novice
27. april 2007 - 13:18 #7
Et hurtigt forsøg:

  var talte = [];
  talte["A"] = 8;
  talte["B"] = 7;
  talte["C"] = 5;
  var maxId,max=0;
for(x in talte){
  if(talte[x] > max){
    max = talte[x];
    maxId = x;
  }
}
alert(maxId + ": " + max);

-- og også her skulle principperne i ActionScript være det samme, da også det er baseret på EcmaScript-standarden !-)

Velbekomme '-)
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