Hej alle guruer deruden!
Jeg er helt ny i det med at bruge classes og OOP javascript ... Forsøger at få sådan en quiz til at virke:
[code]
function Quiz() {
this.tvm = 0;
this.id = 0;
this.kk = 0;
this.gd = 0;
this.mpl = 0;
this.cur_slide = 0;
var html = [
function() {
var ler;
ler += 'FÆRDIG!!!';
return ler;
},
function() {
var ler;
ler += '1 Du har lige meldt dig ind i Lemvig Bowlingklub, du synes, de er nogle fine mennesker, og du vil gerne hjælpe klubben. Hvad tænker du?';
ler += '<form> ';
ler += ' <p><input type="radio" name="answer" value="tvm" /> De har brug for video på Youtube ';
ler += ' <p><input type="radio" name="answer" value="id" /> De skal have en ny hjemmeside ';
ler += ' <p><input type="radio" name="answer" value="gd" /> De skal have et fedt logo ';
ler += ' <p><input type="radio" name="answer" value="kk" /> De skal have et slogan ';
ler += ' <p><input type="radio" name="answer" value="mpl" /> Jeg vil gerne sidde i bestyrelsen';
ler += '</form> ';
ler += '<input type="button" onclick="quiz.submit()" value="Næste" /> ';
return ler;
}
]
function render() {
/*
Denne funktion sørger for ALT der har med at rendere et nyt view at gøre. Den indeholder ikke HTML men skaffer det fra html[]
*/
var quizcon = document.getElementById('quizcon');
var newhtml;
switch (this.cur_slide) {
case html.length:
// hvis man er nået videre end den sidste post i html[], vis resultaterne.
newhtml = html[0]();
break;
default:
// så længe man ik er nået videre end html.length, så skift til det html der er på posten html[this.cur_slide]
newhtml = html[this.cur_slide]();
}
quizcon.innerHTML = newhtml;
}
function next() {
this.cur_slide++;
alert(this.cur_slide); // siger NaN !!
render();
}
function Submit() {
/*
smider et point i en af puljerne
*/
var inputs = document.forms[0].getElementsByTagName('input');
if (inputs) {
for (var i = 0; i < inputs.length; ++i) {
if (inputs
.type == "radio" && inputs.name == "answer" && inputs.checked == true) {
switch (inputs.value) {
case "tvm":
this.tvm++;
break;
case "id":
this.id++;
break;
case "kk":
this.kk++;
break;
case "gd":
this.gd++;
break;
case "mpl":
this.mpl++;
break;
}
alert (this.tvm);
}
}
}
next();
}
}
[code]
Det der burde ske:
Brugeren trigger Submit(), når man bladrer videre i quizzen. Submit() gør nogle praktske ting, og kalder så next().
next() skal tælle this.cur_slide én op, og kalde render() - men allerede her i next() er this.slide ikke tilgængelig længere! Hvorfor ikke? ... og det samme sker selvfølgelig i render()
Jeg tror jeg kludrer i "this.", hvornår en variabel er en reference og hvornår den er value.. Fatter det ik helt suk PHP er nemmere...