Avatar billede cardking Nybegynder
08. juni 1999 - 17:51 Der er 24 kommentarer og
1 løsning

Quiz i JavaScript

Jeg roder med at lave en Internet-quiz. Det skal være sådan at man har tre valgmuligheder, som giver hhv. 1, 2 og 3 point. Tilsidst, efter ex. 10 spm, har scriptet talt point sammen og linker om til en side ihenhold til hvor mange point man har scoret.
Er der nogen so kan hjælpe ??
Avatar billede cybles Nybegynder
08. juni 1999 - 17:54 #1
Har du en adresse til det du er igang med ?
Avatar billede cardking Nybegynder
08. juni 1999 - 17:55 #2
Nej, jeg har sådan set kun lavet spørgsmålene.
Avatar billede justincase Nybegynder
08. juni 1999 - 18:06 #3
Hvordan skal siden se ud ?
En lang side med alle spørgsmål og svarmuligheder, eller hvordan ?

JustinCase
Avatar billede cardking Nybegynder
08. juni 1999 - 18:10 #4
Jeg havde tænkt mig at det skulle være et lille vindue som poppede op (det script har jeg lavet).
Derefter skal man svare på et af tre spørgsmål (i en checkbox)
Trykke 'submit'
Herefter skulle de næste 3 spørgsmål dukke op.
Og så fremdeles..
Avatar billede justincase Nybegynder
08. juni 1999 - 18:21 #5
Kan jeg ikke få dig til at indsende det popup-script du har lavet i forvejen, så er der lidt at gå ud fra.
Avatar billede cardking Nybegynder
08. juni 1999 - 18:31 #6
<html>
<head>
    <title>Min Quiz</title>
</head>
<SCRIPT LANGUAGE="JavaScript">
<!--//
function launch(newURL, newName, newFeatures, orgName) {
  var remote = open(newURL, newName, newFeatures); 
  if (remote.opener == null)
    remote.opener = window;  remote.opener.name = orgName;  return remote;}

function launchRemote() {
  myRemote = launch("quiz.html",
                    "myRemote",
                    "height=200,width=300,alwaysLowered=0,alwaysRaised=0,channelmode=0,dependent=0,directories=0,fullscreen=0,hotkeys=1,location=0,menubar=0,resizable=0,scrollbars=0,status=0,titlebar=1,toolbar=0,z-lock=0",
                    "myWindow");}
// --></SCRIPT>

<BODY>

<A HREF="java script:launchRemote()">QUIZ</A>


</body>
</html>
Avatar billede cardking Nybegynder
08. juni 1999 - 18:33 #7
PS: Jeg har lige pillet alt det udnødvendige fra. - Som i kan se gør Scriptet ikke andet en at åbne et vindue.
Avatar billede cyberesben Nybegynder
08. juni 1999 - 20:00 #8
jeg kan godt lave scriptet til dig lidt senere... måske først i morgen :-(
Avatar billede justincase Nybegynder
08. juni 1999 - 20:00 #9
Hej cardking

OK, det var jo meget sjovt.

Her er hvad du gør.

Gør variablen remote til en global variabel :

var remote;
function launch(newURL, newName, newFeatures, orgName) {
  remote = open(newURL, newName, newFeatures); 
  if (remote.opener == null)
  remote.opener = window;
  remote.opener.name = orgName;
  return remote;
}

Og indsæt følgende variabler og funktion :

// samlet antal spørgsmål
var antalSpm = 4;
// Startspørgsmål
var nuvSpm = 1;
// En tekststreng indeholdende alle svarene
var rigtigeSvar = "abca";
// Startpoint
var point = 0;
function behandlSvar(svar) {
  if (svar == rigtigeSvar.charAt(nuvSpm-1)) {
    point++;
  }
  nuvSpm++;
  if (nuvSpm <= antalSpm) {
    remote.location.href="spm"+nuvSpm+".htm";
    remote.focus();
  }
  else {
    remote.close();
    alert("du fik "+point+" point.");
  }
}

----------------------------------------------------

Og så et eksempel på hver spørgsmålsside (navn = "spm1.htm") :

<html>
<head>
<script language="JavaScript">

var svar;
function besvar() {
  this.opener.behandlSvar(svar);
}

function rbSel(value) {
  svar = value;
}
</script>
</head>

<body bgcolor="#FFFFFF">
<p>Sp&oslash;rgsm&aring;l 1:</p>
<form method="post" action="" name="spgsMal">
  a
  <input type="radio" name="sp" value="a" onClick="rbSel(this.value)">
  b
  <input type="radio" name="sp" value="b" onClick="rbSel(this.value)">
  c
  <input type="radio" name="sp" value="c" onClick="rbSel(this.value)">
  <input type="button" onClick="besvar()" value="svar">
</form>
<p>&nbsp; </p>
</body>
</html>

Spørg løs, hvis du ikke forstår eller mangler noget

:)
JustinCase
Avatar billede erikjacobsen Ekspert
08. juni 1999 - 23:56 #10
Jeg kan give dig en anden quiz på nettet du kan blive inspireret af:

http://www.jytte.madsen.org/javascriptseks/rammer.htm og vælg
"bananer i pyjamas" for at få en quiz om ... gæt engang, eller
"lav din egen..." for online - i JavaScript - at lave din egen quiz
(med visse begrænsninger).
Avatar billede cardking Nybegynder
09. juni 1999 - 09:10 #11
Justincase, et af mine problemer er at komme fra spm1 til spm2, hvordan løser du den.
Ellers er dit script godt tænkt. Jeg var selv ude i at lave noget med frames og lave kodningen i parent-framet.
Avatar billede justincase Nybegynder
09. juni 1999 - 10:07 #12
Hej cardking

I denne funktion (behandlSvar) ser vi på om det var det sidste spørgsmål eller ej. Hvis Det ikke var det sidste lægges der en til nuværende spørgsmål tælleren, som så henter næste side ind i remote window og bringer det frem i front.

function behandlSvar(svar) {
  if (svar == rigtigeSvar.charAt(nuvSpm-1)) {
    point++;
  }
  // Her lægges 1 til nuværende spørgsmål.
  nuvSpm++;
  if (nuvSpm <= antalSpm) {
    // Og her hentes det ind i remote window.
    remote.location.href="spm"+nuvSpm+".htm";
    remote.focus();
  }
  else {
    remote.close();
    alert("du fik "+point+" point.");
  }
}

Altså hver spørgsmål side hedder :
spm1.htm
spm2.htm
spm3.htm

osv.

Virker det ikke hos dig ??
Eller er det noget andet der er problemet?

:)

JustinCase
Avatar billede cardking Nybegynder
09. juni 1999 - 12:02 #13
JustinCase, hvordan åbner jeg mit vindu i det første script. Jeg har brugt:
<A HREF="java script:launch()">QUIZ</A>
Men den vil ikke fremfinde spm1.htm
Avatar billede justincase Nybegynder
09. juni 1999 - 12:42 #14
Nåja, selvfølgelig

Du skal ændre filnavnet til det aktuelle i launchRemote :

function launchRemote() {
  myRemote = launch("spm1.htm","myRemote","height=200,width=300,alwaysLowered=0,alwaysRaised=0,channelmode=0,dependent=0,directories=0,fullscreen=0,hotkeys=1,location=0,menubar=0,resizable=0,scrollbars=0,status=0,titlebar=1,toolbar=0,z-lock=0","myWindow");
}
               
Og så :

<a href="java script:launchRemote()">QUIZ</a>

JustinCase
Avatar billede cardking Nybegynder
09. juni 1999 - 12:51 #15
JUHUU, jeg har fået det til at virke nu.
Der er lige en ting: Som den er nu, tæller den kun de rigtige svar sammen. Jeg havde tænkt mig at lave det således at man fik hhv. 1, 2 eller 3 point, som så blev talt sammen. Når man havde svarret på alle spørgsmål, skulle den så åbne en html-side, som skrev hvor mange point som man havde opnået.
Justincase: Husk at skrive din løsning som et svar, ikke en kommentar - mine 60 point går til dig. - Cool Script!!!
Avatar billede justincase Nybegynder
09. juni 1999 - 12:58 #16
OK, så får du et svar, men lad os fortsætte lidt, for der skal laves lidt om på scriptet for at får grader af "rigtighed".

JustinCase
Avatar billede cardking Nybegynder
09. juni 1999 - 13:06 #17
Ja, det tænkte jeg nok. kan man ikke lave en funktion som tæller op i det globale Script.
Fx. behandlSvar(svar), hvor svar er et tal fra 1-3 ??
Avatar billede cardking Nybegynder
09. juni 1999 - 13:08 #18
Er er for en god ordens skyld dine hårdt tjente point.

PS: Det er noget svineri at nogen folk bare udlover 600 point for et svar.
Det ødelægger sku lidt af den her super-cool ide...
Avatar billede cardking Nybegynder
09. juni 1999 - 13:10 #19
Hvordan giver man point ??
Avatar billede justincase Nybegynder
09. juni 1999 - 13:34 #20
Hej igen

Så skulle den vist være der

Istedet for der hvor der står :

var rigtigeSvar = "abca";

Indsættes :

var rigtigeSvar = new Array(4)
rigtigeSvar[1] = "abc";
rigtigeSvar[2] = "bac";
rigtigeSvar[3] = "cba";
rigtigeSvar[4] = "bca";

Hvor (for rigtigeSvar[1]) a giver 1 point, b 2 og c 3 point i det første spørgsmål.

Nu skal du så ændre bahandlSvar funktionen til :

function behandlSvar(svar) {
  point += rigtigeSvar[nuvSpm].indexOf(svar)+1;
  nuvSpm++;
  if (nuvSpm <= antalSpm) {
    remote.location.href="spm"+nuvSpm+".htm";
    remote.focus();
  }
  else {
    remote.close();
    results();
  }
}

Og til sidst indsætte denneher funktion :

function results() {
  var resulPage;
  if (point >= 10 && point <= 12) {resultPage = "res1.htm";}
  if (point >= 7 && point <= 9) {resultPage = "res2.htm";}
  if (point >= 4 && point <= 6) {resultPage = "res32.htm";}
  if (point <= 3) {resultPage = "res4.htm";}
  window.location.href = resultPage;
}


Med hensyn til pointene, så må folk selv om det. En ide kan stadig være god, selvom folk ikke fanger den.
For mig er det her lidt god træning, og en god chance for ikke at arbejde hele tiden. Desuden får man selv ideer af at svare :D

Og udover det har har du givet mig pointene ved at accepter mit svar.

Spørg videre hvis der er mere..

:)

JustinCase
Avatar billede cardking Nybegynder
09. juni 1999 - 16:14 #21
det ser godt ud. Der er dog lige et problem: Hvor åbner siden. res1.htm

Skal man sætte et target til dem for at de åbner i vinduet ?

Eller har jeg lavet noget forkert ?

Hvordan henviser man til resultatet i res1.htm. eks: Du fik x antal poient ?
Avatar billede justincase Nybegynder
09. juni 1999 - 16:31 #22
Resultaterne kommer i hovedvinduet !!
Hvis du hellere vil have resultaterne i
romote window, så fjern linien :

remote.close();

i behandlSvar funktionen. Og udskift så :

window.location.href = resultPage;

med

remote.location.href = resultPage;

if funktionen results


Hvis du vil have remote window til at
vise præcis hvor mange point man fik
skal du stadig sletter remote.close()
og så udskifte funktionen resultes med følgende :

function results() {
  remote.document.open();
  remote.document.write("Du fik "+point+" point.");
  remote.document.close();
}


Håber det hjælper lidt og igen : spørg endelig.

Justin Case
Avatar billede cardking Nybegynder
09. juni 1999 - 17:34 #23
Jeg takker mange gange Justin Case.
Du er en Script-knag.
Hilsen Cardking
Avatar billede justincase Nybegynder
09. juni 1999 - 17:52 #24
Du er velkommen.

Læg endelig en link her når du er færdig.

:)

JustinCase
Avatar billede theartist Nybegynder
30. juli 1999 - 20:06 #25
Til Justincase>> Hejsa jeg har siddet og leget lidt med din og cardkings javascript quiz. Den er faktisk helt fed, men jeg støder ind i et problem, og jeg tænkte at du kunne være manden til at fortælle mig hvad der er galt.

1) for det første så har jeg et prob. efter det sidste spørgsmål, der linker min spg.side videre til ingenting og hvis jeg så vælger back og trykker svar igen så kommer resultatet i hovedvinduet, hvordan kan dette løses?

2) så vil jeg gerne have det præcise pointtal skrevet på min resultatside, og har derfor prøvet med det her:

function results() {
  var resulPage;
  if (point >= 10 && point <= 12)
  {resultPage = "res1.htm";
  document.write("du fik "+point+" point.");
  }
  if (point >= 7 && point <= 9)
  {resultPage = "res2.htm";
  document.write("du fik "+point+" point.");}
  if (point >= 4 && point <= 6)
  {resultPage = "res3.htm";
  document.write("du fik "+point+" point.");}
  if (point <= 3)
  {resultPage = "res4.htm";
  document.write("du fik "+point+" point.");}
  window.location.href = resultPage;
}

det betyder dog bare at hvis du trykker back på browseren så kan du se pointtallet i spm?.htm siden, men ellers ikke, så hvordan får jeg det på min resultatside.

Du kan se det hele her: http://www.imma.dk/theartist/test/quiz2.htm

Nå men jeg skylder dig også nogle points fra et tidligere spørgsmål som gik til en anden, så dem kunne du jo få hvis du svarede på dette her, jeg laver et spørgsmål til dig, hvis du svarer og sætter 50 point på højkant.

På forhånd tak
--:TheArtist:--
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