En frågesport på hemsidan

Det finns många program som man kan använda för att göra frågeformulär eller frågesporter till hemsidan, men det är roligare att göra alltsammans själv. Då kan man anpassa sidan precis som man själv vill ha den.

Här går jag igenom hur man gör. Du kan också testa en färdig sida med 12 frågor och hämta koden nedan som ZIP-fil.

Testa ett frågeformulär
Hämta koden

Observera

Radbrytningarna i kodblocken nedan blir olika beroende på skärmupplösning och webbläsare. Om du hämtar koden via länken ovan och öppnar textfilen som ZIP-filen innehåller, kan du vara säker på att radbrytningarna blir som de skall vara.

Så här fungerar det

Frågesporten visar först en sida med frågorna. När besökaren har klickat in sina svar, kan han kontrollera om svaren är rätt.

Detta visas i ett popup-fönster, som skapas av ett JavaScript på sidan med frågorna. Skriptet bygger upp hela svarssidan, med stilmall och allt.

Men först tar vi den inledande HTML-koden till sidan som skall visa frågorna:

<HTML>
<HEAD>

<TITLE>Gör frågesport</TITLE>
<STYLE TYPE="text/css">
BODY {background-color:#FBF9F9;}
H1 {text-align:center;color:#008000;font-family:"times new roman", serif;font-size:18pt;}
H3 {text-align:center;color:Green;font-family:Verdana, Geneva, Arial, Helvetica, sans-serif;font-size:12pt;}
H4 {text-align:center;color:#483D8B;font-family:"times new roman", serif;font-size:12pt; margin-bottom:0px;margin-top:0px;}
P {margin:1em;color:#000000;font-family:arial, sans-serif;font-size:10pt;}
B {color:#008000;font-family:arial, sans-serif;font-size:10pt;}
</STYLE>

Här ligger en lokal stilmall i HEAD-taggen. Om du redan använder stilmallar på alla dina sidor kan du hoppa över den här stilmallen och koppla sidan till den globala stilmallen på vanligt sätt.

Men om dina sidor inte använder stilmallar, bör du ändå utnyttja en sådan just här. Då slipper du alla FONT-taggarna längre ned på sidan och koden blir betydligt lättare att läsa.

JavaScript

Direkt efter stilmallen kommer skriptet. Jag har delat upp det för att kunna förklara en bit i taget. Alla rader som börjar med // är kommentarsrader som inte påverkar skriptkörningen:

<SCRIPT LANGUAGE="JavaScript">
<!-- Karin Andersson för SupportData.Net karin@supportdata.net
// Deklarera en variabel för varje fråga – i det här fallet 2 frågor.
var Svar1 = new String
var Svar2 = new String
// Den här funktionen kontrollerar svaren.
function KollaSvar()
{
// Variabeln "i" räknar antalet korrekta svar och sätts från början till 0.
var i = 0;
// Variabeln antal anger det totala antalet frågor.
antal = 2

Deklarera variabler och funktionen
Jag deklarerar först variablerna "Svar1" och "Svar2" - lika många variabler som frågor. Sedan deklarerar jag funktionen KollaSvar() som skall kontrollera svaren och skapa popup-fönstret. Slutligen deklarerar jag variabeln "i", som kommer att räkna antalet korrekta svar, och variabeln "antal" som anger det totala antalet frågor.

Skriptet fortsätter med den del som skriver HEAD-elementet i det nya fönstret:

// Här anges vilka egenskaper popup-fönstret skall ha.
// Alternativen kan anges i en enda rad eller delas i flera rader.
// Jag har delat upp alternativen på två rader,
// för att visa hur det skall se ut.
svarsruta = "toolbar=0,location=0,directories=0,status=0,"
svarsruta+= "menubar=0,height=310,width=370,scrollbars=1,resizable=1"
// Här öppnas fönstret med svaren.
Svar = window.open("","msgWindow",svarsruta)
Svar.opener=window;
Svar.opener.name="opener";
Svar.document.clear;
// Raderna Svar.document.write skriver HTML-koden till
// HEAD-elementet i det nya fönstret.
// Jag har delat upp detta på sex rader, men allt kan
// läggas i en enda rad utan radbrytning.
// HEAD-elementet innehåller en stilmall där jag anger
//
egenskaperna för bakgrundsfärg, två rubriknivåer,
//
P-taggen och B-taggen.
Svar.document.write("<HEAD><TITLE>Svar...</TITLE>");
Svar.document.write("<STYLE TYPE='text/css'>BODY {background-color:#FBF9F9;}");
Svar.document.write("H1 {text-align:center;color:#008000;font-family:'times new roman',serif;font-size:18pt;}");
Svar.document.write("H3 {text-align:center;color:Green;font-family:Verdana, Geneva, Arial, Helvetica, sans-serif;font-size:12pt;}");
Svar.document.write("P {margin:1em;color:#000000;font-family:arial, sans-serif;font-size:10pt;}");
Svar.document.write("B {color:#008000;font-family:arial, sans-serif;font-size:10pt;}</STYLE></HEAD>");

Egenskaper på fönstret samt en stilmall
Den här koden anger hur popup-fönstret skall se ut och vilka egenskaper det skall ha. I variabeln "svarsruta" har jag satt de flesta egenskaperna till 0. Alla egenskaper anges med 1 (egnskapen används) eller 0 (egenskapen används inte), utom höjd och bredd som anges i pixlar:

toolbar   Webbläsarens verktygsrad visas (1) eller visas inte (0)
location   Webbläsarens adressfält visas (1) eller visas inte (0)
directories   Webbläsarens verktygsrad visas (1) eller visas inte (0)
status   Webbläsarens statusrad visas (1) eller visas inte (0)
menubar   Webbläsarens menyrad visas (1) eller visas inte (0)
height   Höjden på fönstret i pixlar
width   Bredden på fönstret i pixlar
scrollbars   Webbläsarens rullningslister visas (1 - rekommenderas) eller visas inte (0)
resizable   Besökaren kan (1 – rekommenderas) eller kan inte (0) ändra fönstrets storlek

Svar.document.write
Det här är koden som skriver HEAD-elementet i popup-fönstret. För att det nya fönstret skall visas snyggt, har jag lagt in en stilmall i koden. Du kan lägga hela koden i en enda rad som börjar med Svar.document.write(" och slutar med "); Där emellan tar du bort alla parentestecken.

Sedan kommer koden som skriver början på BODY-elementet:

// Här skrivs HTML-koden till BODY-elementet.
Svar.document.write('<BODY topmargin="0" leftmargin="0" marginwidth="0" marginheight="0"> ')
Svar.document.write("<H1>Svar...</H1>");
//Korrekta och felaktiga svar visas i en lista.
if (Svar1.toLowerCase()=="a")
{
// De korrekta svaren räknas ihop och variabeln "i" ökas med 1 för varje
// riktigt svar. Bokstaven "a" i if-satsen anger vilket svar som är det rätta.
// Om svaret är korrekt visas "Rätt" efter frågans nummer.
i+=1;
Svar.document.write("<P><B>Fråga 1:</B> Rätt</P>");
}
else
{
// Om svaret var fel, visas det korrekta svaret med eventuell kommentar.
Svar.document.write("<P><B>Fråga 1:</B> Fel. Rätt svar är februari, som har 28 eller 29 dagar medan alla andra har minst 30.</P>");
}
if (Svar2.toLowerCase()=="c")
{
i+=1;
Svar.document.write("<P><B>Fråga 2:</B> Rätt</P>");
}
else
{
Svar.document.write("<P><B>Fråga 2:</B> Fel. Rätt svar är Nidhögg.</P>");
}
// Här skrivs hur många svar som var korrekta i förhållande till totala antalet frågor.
Svar.document.write("<H3>Du svarade rätt på "+i.toString()+" av "+antal+" frågor.</H3>");

Vi tittar närmare på några delar av koden:

if (Svar1.toLowerCase()=="a")
Betyder ungefär "om svaret är lika med a". Här skall du alltså ange bokstaven för rätt svarsalternativ i formuläret längre ned på sidan.

i+=1;
Variabeln "i" ökas med 1 för varje svar som är rätt.

Svar.document.write("<P><B>Fråga 1:</B> Rätt</P>");
Det här talar om att svaret var rätt.

Svar.document.write("<P><B>Fråga 1:</B> Fel. Rätt svar är februari, som har ...</P>");
Det här talar om att svaret var fel. Du ger dessutom det korrekta svaret och gärna en förklaring till varför just det svaret var det riktiga.

Viktigt med citationstecknen
En viktig detalj är hur du använder citationstecken. Eftersom hela kodavsnittet i Svar.document.write omges av citationstecken, kan du inte använda samma typ av citationstecken inne i svaret.

Om det till exempel står ("<P><B>Fråga 1:</B> Fel. Ordet "lunae" betyder måne.</P>") kommer du att få ett skriptkörningsfel och svarssidan visas inte. Byt då till enkla citationstecken (') alldeles innanför parenteserna.

Svar.document.write("<H3>Du svarade rätt på "+i.toString()+" av "+antal+" frågor.</H3>");
Det här kommer att skriva ut hur många svar som var rätt och hur många frågor det totalt fanns.

Den sista delen av skriptet och avslutningen på HEAD-elementet:

// En Stäng-knapp läggs in under listan med svaren.
Svar.document.write('<P><FORM name="svarsform"><input type="button" value="Stäng" name="avsluta" OnClick="window.close()"></FORM></P>');
// En e-postlänk läggs till längst ned och popup-fönstrets kod avslutas.
Svar.document.write('<P><a href="mailto:karin@supportdata.net">Skriv till SupportData.Net</A>')
Svar.document.write('</P></BODY></HTML>');
}
// -->
</SCRIPT>
</HEAD>

Besökaren får en knapp för att stänga popup-fönstret och längst ned på sidan placerar du din e-postadress. Sedan avslutas skriptet och HEAD-elementet.

BODY-elementet

Därmed kan vi gå över till det som skall visas på sidan med frågorna.

<BODY topmargin="0" leftmargin="0" marginwidth="0" marginheight="0">
<TABLE width="625" border="0">
<TR><TD width="100%">
<H1>Frågesport</H1>
<H4>Av Ditt namn</H4>
<H3>Om livet (titeln på frågesporten)</H3>
<HR width=75% align=center>
<FORM name="form1">
<B>1. Vad heter den kortaste månaden?</B>
<P><INPUT type="radio" name="Alt1" onClick="Svar1='a'">Februari<BR>
<INPUT type="radio" name="Alt1" onClick="Svar1='b'">Mars<BR>
<INPUT type="radio" name="Alt1" onClick="Svar1='c'">April<BR>
<INPUT type="radio" name="Alt1" onClick="Svar1='d'">Maj</P>
<B>2. Vad heter draken i nordiska gudasagan?</B>
<P><INPUT type="radio" name="Alt2" onClick="Svar2='a'">Majros<BR>
<INPUT type="radio" name="Alt2" onClick="Svar2='b'">Fjalar<BR>
<INPUT type="radio" name="Alt2" onClick="Svar2='c'">Nidhögg<BR>
<INPUT type="radio" name="Alt2" onClick="Svar2='d'">Vanvede</P>
<P><INPUT type="button" value="Svara" name="Kontroll" onClick="KollaSvar()"></P>
</FORM>
</TD></TR></TABLE>
</BODY>
</HTML>

Eftersom hela sidan styrs av en stilmall, behövs inga FONT-taggar eller liknande. Vi kan koncentrera oss på innehållet i stället.

<BODY topmargin="0" leftmargin="0" marginwidth="0" marginheight="0">
Att använda både topmargin/leftmargin och marginwidth/marginheight kan synas som kaka-på-kaka, men det gör att sidan visas utan marginaler i både Internet Explorer och Netscape.

<TABLE WIDTH="640" border="0">
Ange alltid både bredd och rambredd på tabeller, även om du inte vill ha någon ram alls.

<FORM name="form1">
Här börjar formuläret som visar frågorna och svarsalternativen.

<B>1. Vad heter den kortaste månaden?</B>
Det här är den första frågan. Eftersom stilmallen för sidan säger att P-taggar skall visas med indrag, medan B-taggar utanför P-taggar inte berörs av detta, kommer frågorna att visas längst ut till vänster medan svarsalternativen får ett indrag.

<P><INPUT type="radio" name="Alt1" onClick="Svar1='a'">Februari<BR>
Det här är det första svarsalternativet. Observera att "name" skall vara detsamma på alla alternativen inom varje fråga, medan däremot de olika alternativen får varsin bokstav (a – d). "Svar1" får sitt värde när besökaren klickar i ett av alternativen.

<INPUT type="radio" name="Alt1" onClick="Svar1='d'">Maj</P>
Det här är sista svarsalternativet i första frågan. Du kan lägga till fler alternativ genom att använda fler input-rader. Sätt taggen <BR> i slutet av varje rad utom i den sista, där du använder </P>. Se till att varje rad får ett eget värde på Svar1. Detta värde skall skickas till funktionen i javaskriptet.

<P><INPUT type="radio" name="Alt2" onClick="Svar2='a'">Majros<BR>
Första svarsalternativet i den andra frågan. Här är det i stället "Svar2" som får ett värde.

</FORM>
Här avslutas formuläret, varpå tabellen, BODY-elementet och hela HTML-dokumentet avslutas.

Svårare än så här behöver det alltså inte vara att göra en frågesport. Läs igenom koden igen, så att du ser hur du kan ändra den.

Testa ett frågeformulär
Hämta koden

© SupportData.Net