problem z quizem w javascript

0

witam

jestem nowa na forum więc jeśli łamię jakiś punkt regulaminu to przepraszam. Zrobiłam prosty quiz w js jednakże jest problem z resetowaniem odpowiedzi chodzi o to ze nawet jak sie kliknie na przycisk wyczysc odpowiedzi to i tak one są zapamiętywne i jak wypełnia się quiz to punkty z poprzednio rozwiazywanego quizu są dodawane do obecnych punktów w onClick dałam funkcję odswiez która tak jakby zeruje odpowiedzi ale to nic nie daje. Zamieszczam poniżej kod

<SCRIPT LANGUAGE="JavaScript">

<!-- Begin
var odp = new Array;
var twojaodp = new Array;

var punkty=0;
odp[1] = "a";
odp[2] = "c";
odp[3] = "b";
odp[4] = "d";
odp[5] = "d";
odp[6] = "b";
odp[7] = "c";
odp[8] = "c";

function zliczanie(pytanie, odpowiedz) {
twojaodp[pytanie]=odpowiedz;
}

function Punkty(){
var odpowiedztekst = "Wynik\n";
for(i=1;i<=8;i++){
   odpowiedztekst=odpowiedztekst;
  if(odp[i]!=twojaodp[i]){
    odpowiedztekst=odpowiedztekst;
  }
  else{
    odpowiedztekst=odpowiedztekst;
    punkty++;
  }
}
function odswiez() {
Punkty()=0;
}
odpowiedztekst=odpowiedztekst+"\n\n Twoje punkty: "+punkty+"\n";

odpowiedztekst=odpowiedztekst+"\nKomentarz: ";
if(punkty<=1){
odpowiedztekst=odpowiedztekst+"musisz jeszcze popracować";
}
if(punkty>=2 && punkty <=3){
odpowiedztekst=odpowiedztekst+"";
}
if(punkty>=4 && punkty <=6){
odpowiedztekst=odpowiedztekst+"całkiem nieźle";
}
if(punkty==7){
odpowiedztekst=odpowiedztekst+"Bardzo dobrze";
}
if(punkty==8){
odpowiedztekst=odpowiedztekst+"Gatulacje jesteś mistrzem";
}
alert(odpowiedztekst);
}
//  End -->
</script>

w body mam

p><font face="Verdana"><b>1. </b><br>
<input type=radio name="q1" value="a" onClick="zliczanie(1, this.value)">a) 
<input type=radio name="q1" value="b" onClick="zliczanie(1, this.value)">b) 
<input type=radio name="q1" value="c" onClick="zliczanie(1, this.value)">c)  <br>
<input type=radio name="q1" value="d" onClick="zliczanie(1, this.value)">d) </font></p>
<p align="justify">
<font face="Verdana">
<b>2. </b><br>
<input type=radio name="q2" value="a" onClick="zliczanie(2, this.value)">a)<br>
<input type=radio name="q2" value="b" onClick="zliczanie(2, this.value)">b)<br>
<input type=radio name="q2" value="c" onClick="zliczanie(2, this.value)">c) <br>
<input type=radio name="q2" value="d" onClick="zliczanie(2, this.value)">d)</font> <p>
<font face="Verdana">
<b>3. </b><br>
<input type=radio name="q3" value="a" onClick="zliczanie(3, this.value)">a)  <br>
<input type=radio name="q3" value="b" onClick="zliczanie(3, this.value)">b) <br>
<input type=radio name="q3" value="c" onClick="zliczanie(3, this.value)">c) <br>
<input type=radio name="q3" value="d" onClick="zliczanie(3, this.value)">d) </font> <p>
<font face="Verdana">
<b>4. </b><br>
<input type=radio name="q4" value="a" onClick="zliczanie(4, this.value)">a) <br>
<input type=radio name="q4" value="b" onClick="zliczanie(4, this.value)">b) <br>
<input type=radio name="q4" value="c" onClick="zliczanie(4, this.value)">c) <br>
<input type=radio name="q4" value="d" onClick="zliczanie(4, this.value)">d) </font><p>
<font face="Verdana">
<b>5.  </b><br>
<input type=radio name="q5" value="a" onClick="zliczanie(5, this.value)">a)<br>
<input type=radio name="q5" value="b" onClick="zliczanie(5, this.value)">b) <br>
<input type=radio name="q5" value="c" onClick="zliczanie(5, this.value)">c) <br>
<input type=radio name="q5" value="d" onClick="zliczanie(5, this.value)">d) </font><p>
<font face="Verdana">
<b>6. </b><br>
<input type=radio name="q6" value="a" onClick="zliczanie(6, this.value)">a) <br>
<input type=radio name="q6" value="b" onClick="zliczanie(6, this.value)">b) <br>
<input type=radio name="q6" value="c" onClick="zliczanie(6, this.value)">c) <br>
<input type=radio name="q6" value="d" onClick="zliczanie(6, this.value)">d) </font><p>
<font face="Verdana">
<b>7.  </b><br>
<input type=radio name="q7" value="a" onClick="zliczanie(7, this.value)">a)<br>
<input type=radio name="q7" value="b" onClick="zliczanie(7, this.value)">b),<br>
<input type=radio name="q7" value="c" onClick="zliczanie(7, this.value)">c)<br>
<input type=radio name="q7" value="d" onClick="zliczanie(7, this.value)">d)</font><p>
<font face="Verdana">
<b>8.  </b><br>
<input type=radio name="q8" value="a" onClick="zliczanie(8, this.value)">a) <br>
<input type=radio name="q8" value="b" onClick="zliczanie(8, this.value)">b)<br>
<input type=radio name="q8" value="c" onClick="zliczanie(8, this.value)">c) <br>
<input type=radio name="q8" value="d" onClick="zliczanie(8, this.value)">d) </font><p>
&nbsp;<p>
<CENTER>
<font face="Verdana">
<font size="3">
<input type=button onClick="Punkty()" value="Wynik"></font>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
<font face="Verdana" size="4"><input type="reset" onClick="odswiez()" value="Wyczyść odpowiedzi"></font></font>
</CENTER>
</FORM>

Będę wdzięczna za pomoc

0

Nie patrzyłem dokładnie, ale zdaje mi się, że w funkcji odswiez musisz wywalić wszystkie odpowiedzi zawarte w twojaodp.

0

tu masz poprawiony kawałek kodu ;) powinno działać ;)

<html>
<body>
<form name=f>

<SCRIPT LANGUAGE="JavaScript">

<!-- Begin
var odp = new Array;
var twojaodp = new Array;

var punkty=0;
odp[1] = "a";
odp[2] = "c";
odp[3] = "b";
odp[4] = "d";
odp[5] = "d";
odp[6] = "b";
odp[7] = "c";
odp[8] = "c";

function zliczanie(pytanie, odpowiedz) {
twojaodp[pytanie]=odpowiedz;
}

function Punkty(){
punkty = 0
var odpowiedztekst = "Wynik\n";
for(i=1;i<=8;i++){
   odpowiedztekst=odpowiedztekst;
  if(odp[i]!=twojaodp[i]){
    odpowiedztekst=odpowiedztekst;
  }
  else{
    odpowiedztekst=odpowiedztekst;
    punkty++;
  }
}
function odswiez() {
document.f.q1[0].checked = false;
document.f.q1[1].checked = false;
document.f.q1[2].checked = false;
document.f.q1[3].checked = false;

document.f.q2[0].checked = false;
document.f.q2[1].checked = false;
document.f.q2[2].checked = false;
document.f.q2[3].checked = false;

document.f.q3[0].checked = false;
document.f.q3[1].checked = false;
document.f.q3[2].checked = false;
document.f.q3[3].checked = false;

document.f.q3[0].checked = false;
document.f.q3[1].checked = false;
document.f.q3[2].checked = false;
document.f.q3[3].checked = false;

document.f.q4[0].checked = false;
document.f.q4[1].checked = false;
document.f.q4[2].checked = false;
document.f.q4[3].checked = false;

document.f.q5[0].checked = false;
document.f.q5[1].checked = false;
document.f.q5[2].checked = false;
document.f.q5[3].checked = false;

document.f.q6[0].checked = false;
document.f.q6[1].checked = false;
document.f.q6[2].checked = false;
document.f.q6[3].checked = false;

document.f.q7[0].checked = false;
document.f.q7[1].checked = false;
document.f.q7[2].checked = false;
document.f.q7[3].checked = false;

document.f.q8[0].checked = false;
document.f.q8[1].checked = false;
document.f.q8[2].checked = false;
document.f.q8[3].checked = false;

punkty=0;
}
odpowiedztekst=odpowiedztekst+"\n\n Twoje punkty: "+punkty+"\n";

odpowiedztekst=odpowiedztekst+"\nKomentarz: ";
if(punkty<=1){
odpowiedztekst=odpowiedztekst+"musisz jeszcze popracować";
}
if(punkty>=2 && punkty <=3){
odpowiedztekst=odpowiedztekst+"";
}
if(punkty>=4 && punkty <=6){
odpowiedztekst=odpowiedztekst+"całkiem nieźle";
}
if(punkty==7){
odpowiedztekst=odpowiedztekst+"Bardzo dobrze";
}
if(punkty==8){
odpowiedztekst=odpowiedztekst+"Gatulacje jesteś mistrzem";
}
alert(odpowiedztekst);
}
//  End -->
</script>
 
TEST
<p>
1. <br>
<input type=radio name="q1" value="a" onClick="zliczanie(1, this.value)">a) <br>
<input type=radio name="q1" value="b" onClick="zliczanie(1, this.value)">b) <br>
<input type=radio name="q1" value="c" onClick="zliczanie(1, this.value)">c)  <br>
<input type=radio name="q1" value="d" onClick="zliczanie(1, this.value)">d) </p>
<p align="justify">

2. <br>
<input type=radio name="q2" value="a" onClick="zliczanie(2, this.value)">a)<br>
<input type=radio name="q2" value="b" onClick="zliczanie(2, this.value)">b)<br>
<input type=radio name="q2" value="c" onClick="zliczanie(2, this.value)">c) <br>
<input type=radio name="q2" value="d" onClick="zliczanie(2, this.value)">d) <p>

3. <br>
<input type=radio name="q3" value="a" onClick="zliczanie(3, this.value)">a)  <br>
<input type=radio name="q3" value="b" onClick="zliczanie(3, this.value)">b) <br>
<input type=radio name="q3" value="c" onClick="zliczanie(3, this.value)">c) <br>
<input type=radio name="q3" value="d" onClick="zliczanie(3, this.value)">d) <p>

4. <br>
<input type=radio name="q4" value="a" onClick="zliczanie(4, this.value)">a) <br>
<input type=radio name="q4" value="b" onClick="zliczanie(4, this.value)">b) <br>
<input type=radio name="q4" value="c" onClick="zliczanie(4, this.value)">c) <br>
<input type=radio name="q4" value="d" onClick="zliczanie(4, this.value)">d) <p>

5.  <br>
<input type=radio name="q5" value="a" onClick="zliczanie(5, this.value)">a)<br>
<input type=radio name="q5" value="b" onClick="zliczanie(5, this.value)">b) <br>
<input type=radio name="q5" value="c" onClick="zliczanie(5, this.value)">c) <br>
<input type=radio name="q5" value="d" onClick="zliczanie(5, this.value)">d) <p>

6. <br>
<input type=radio name="q6" value="a" onClick="zliczanie(6, this.value)">a) <br>
<input type=radio name="q6" value="b" onClick="zliczanie(6, this.value)">b) <br>
<input type=radio name="q6" value="c" onClick="zliczanie(6, this.value)">c) <br>
<input type=radio name="q6" value="d" onClick="zliczanie(6, this.value)">d) <p>

7.  <br>
<input type=radio name="q7" value="a" onClick="zliczanie(7, this.value)">a)<br>
<input type=radio name="q7" value="b" onClick="zliczanie(7, this.value)">b),<br>
<input type=radio name="q7" value="c" onClick="zliczanie(7, this.value)">c)<br>
<input type=radio name="q7" value="d" onClick="zliczanie(7, this.value)">d)<p>

8.  <br>
<input type=radio name="q8" value="a" onClick="zliczanie(8, this.value)">a) <br>
<input type=radio name="q8" value="b" onClick="zliczanie(8, this.value)">b)<br>
<input type=radio name="q8" value="c" onClick="zliczanie(8, this.value)">c) <br>
<input type=radio name="q8" value="d" onClick="zliczanie(8, this.value)">d) <p>
 <p>
<CENTER>


<input type=button onClick="Punkty()" value="Wynik">        
<input type="reset" onClick="odswiez()" value="Wyczyść odpowiedzi">
</CENTER>
</form>
<body>
<html>
1

@Gość:
Przepraszam, co to ma być?

Kod, który dodałeś do kodu autorki tematu, to tragedia. Taki piszą nowicjusze nie znający podstawowych zasad programowania -- a tutaj ich łamanie wręcz wali po oczach. Nie ma niczego złego w byciu nowicjuszem, nie ma niczego złego w chęci pomocy. Ale trzeba mieć świadomość własnych ograniczeń na daną chwilę i nie wychylać się za bardzo w tematach, z których nie jesteśmy mocni. Można czasem pomagać w jęzuku X jeśli znamy tylko język Y, ale trzeba w tym języku Y mieć pewne doświadczenie.

W kodzie, który dodałeś jest prawdziwe morze powtórzeń. Jak go pisałeś? Metodą kopiuj/wklej? Jeśli używasz ciągle skrótów CTRL+C / CTRL+V to samo to świadczy o pogwałceniu podstawowej zasady programowania: DRY. Don't Repeat Yourself. Nie powtarzaj się. Agnieszka w oryginalnym kodzie też gdzieniegdzie łamie tę zasadę (np. w warunku pętli for ósemka dubluje rozmiar tablicy odp, który też wynosi osiem -- powinna się odnieść do odp.length zamiast powtarzać informację o długości pisząc ósemkę). Ale nie łamie tej zasady w aż tak oczywisty sposób.

Polecam uznać to za lekcję i wbić sobie do głowy zasadę DRY. Pogooglać o niej, poczytać na wikipedii. Wziąć sobie do serca, bo mieści się w top 3 czy top 2 podstawowych, najważniejszych zasad programowania.

W tym przypadku, żeby zrobić to co chciałeś zrobić, trzeba było np. użyć metod DOM żeby wybrać wszystkie checkboxy z pytań i użyć pętli, by każdego z nich wyczyścić.

@agnieszka19:
Twoja funkcja odswiez() nie zeruje odpowiedzi. Co to jest za zapis?

Punkty()=0;

Jak to działa? Do czego jest to zero przypisywane?

Wiesz co mi odpowiesz na te pytania? Rozpoczniesz mniej-więcej od powiedzenia "Eee... yyy... tego", a potem spróbujesz wymyślić na szybko wytłumaczenie, że to "tak jakby" coś tam robi.

To złe podejście. W programowaniu nie ma miejsca na "tak jakby" ani na przypadkowość. Komputery tak nie działają. Przynajmniej teoretycznie ;).

Musisz wiedzieć co robisz. W praktycznie każdym języku programowania instrukcji i możliwości jest tyle, że nie ma sensu układać ich byle jak i liczyć, że to zadziała -- większa jest szansą na szóstkę w totka.

Co robi np. ta linijka?

odpowiedztekst=odpowiedztekst;

Masz ją powtórzoną trzy razy. Co ona robi, dlaczego i po co?

Zauważ proszę, że funkcję odswiez() zdefiniowałaś sobie wewnątrz funkcji Punkty() -- czy na pewno chciałaś to zrobić? Funkcja odswiez nie jest przez to widoczna poza funkcją Punkty. Nie jest więc widoczna z poziomu zdarzenia onclick przycisku Wyczyść.

Ten ostatni błąd jest spowodowany złym formatowaniem kodu. Przerób formatowanie tak, by było lepsze. Jak masz klamrę otwierającą {, to kod pod nią powinien być wcięty o np. 2 spacje (lub np. 4 spacje, lub znak tabulacji -- ważne, byś była konsekwentna), aż do klamry zamykającej }. W tej pętli for masz to zrobione prawie dobrze. Niech instrukcje funkcji też będą wcięte.

Czyli nie tak:

function Punkty(){
punkty = 0
var odpowiedztekst = "Wynik\n";
// ...
}

Tylko tak:

function Punkty(){
  punkty = 0
  var odpowiedztekst = "Wynik\n";
  // ...
}

Jeśli to zrobisz, w dodatku spójnie, to zobaczysz, że funkcja Odswiez nie jest zdefiniowana tam, gdzie powinna.

Jak kod zostanie jakoś sformatowany i trochę wyczyszczony, to dopiero będzie można nad nim popracować na serio.

1 użytkowników online, w tym zalogowanych: 0, gości: 1