Autor Zpráva
Děda
Profil *
Zdravím, nejsem starší muž který měl trošku zkušenosti s výrobou stránek a JavaSkriptů v počátcích Internetu.
Chtěl jsem udělat dětem kvíz - vždy kliknou na 3 správné varianty dotazu a pak se dostanou do dalšího kola. Jenže ono mi to nesčítá. Kde mám prosím chybu?

<script> 
var hotovo;
hotovo = nahoda+nahodab+nahodac;

function plast(){
var nahoda = Math.ceil(Math.random()*1);
document.getElementById("plast").innerHTML=nahoda;
}

function sklo(){
var nahodab = Math.ceil(Math.random()*1);
document.getElementById("sklo").innerHTML=nahodab;
}

function rouska(){
var nahodac = Math.ceil(Math.random()*1);
document.getElementById("rouska").innerHTML=nahodac;
}

if (hotovo = 3) {window.location="dalsi_hra.htm";}

</script> 
anonym_
Profil *
Děda:
Otevři si konzoli a zjistíš, kde je problém. Napovím, hned na 3. řádku.
Děda
Profil *
anonym: díky, jak otevřu to konzoli.
anonym_
Profil *
Děda:
Zde nebude problém jen v základech JS, ale i v používání vyhledávače.

U mě v Mac/safari Command+option+I, na Widnowsech pravdpodobně F12 nebo Ctrl+Alt/Shift+I. Možná prohlížeč od prohlížeče, zapoj trochu snahy a vlastní iniciativy.
blaaablaaa
Profil
Děda:
Většinou pomocí F12.

Problém je v tom, že Váš kód nedává smysl.

Na 3. řádku sčítáte 3 proměnné, které neexistují, pak jsou tří funkce, které dovnitř elementů plast/sklo/rouska přes proměnnou přiřadí vždy 1 (Math.random vygeneruje náhodné číslo 0-1, vynásobení jedničkou nic neudělá a Math.ceil číslo vždy zaokrouhlí nahoru na 1).

Chybí nějaké odchycení kliknutí a prakticky jakákoliv logika.
anonym_
Profil *
Děda:
Plus začni základem JS.

Špatně je řádek 3. Proměnné nejsou definované.
Špatně je nepochopení platnosti proměnných (scope). Proměnná nahoda nebude existovat ani za řádkem 8, ta existuje jen uvnitř funkce plast().
Funkce máš definované, ale nikde je nevoláš (tedy nic nevrací).
Elementy, které hledáš na ř. 7, 12, 17 pravděpodobně neexistují. Alespoň ne v tomto fragmentu kódu.

Atd.
Děda
Profil *
díky za postřehy, díky nim jsem to přetvořil takto a funguje to

<script> 
var hotovo;
var nahoda = 0;
var nahodab = 0;
var nahodac = 0;
hotovo = 0;

function plast(){
nahoda = 1;
document.getElementById("plast").innerHTML=nahoda;
hotovo = nahoda + nahodab + nahodac;
if (hotovo ==3) {window.location="dalsi_hra.htm";}
}

function sklo(){
nahodab = 1;
document.getElementById("sklo").innerHTML=nahodab;
hotovo = nahoda + nahodab + nahodac;
if (hotovo ==3) {window.location="dalsi_hra.htm";}
}

function rouska(){
nahodac = 1;
document.getElementById("rouska").innerHTML=nahodac;
hotovo = nahoda + nahodab + nahodac;
if (hotovo ==3) {window.location="dalsi_hra.htm";}
}

</script> 
JsonKody
Profil
Děda:
Promin ale ten kod proste nedava smysl :(
Zkusil jsem ti to prepsat do poradne podoby jak bych to udelal ale pravda je ze i kdyz je to technicky "lepsi" stale to nedava moc smysl protoze pravdepodobne to co chces udelat by se melo delat uplne jinak.

Muzes mi prosim presneji popsat co chces udelat?

Tohle je ten kod, malinko ucesany ale stale je to v podstate nesmysl protoze jen ucesava spatnou logiku misto toho aby se vyrobila dobra (coz nemuzu moc udelat protoze nevim zadani).

// nejprve si ulozim odkazy na elementy
const plastElement = document.getElementById("plast")
const skloElement = document.getElementById("sklo")
const rouskaElement = document.getElementById("rouska")

let plastPoints = false
let skloPoints = false
let rouskaPoints = false

function plast() {
   plastPoints = true
   plastElement.textContent = 'plast je správně'
   checkDone()
}

function sklo() {
   skloPoints = true
   skloElement.textContent = 'sklo je správně'
   checkDone()
}

function rouska() {
   rouskaPoints = true
   rouskaElement.textContent = 'rouska je správně'
   checkDone()
}


// vrati TRUE kdyz jsou vsechny body splneny, jinak FALSE
function isDone() {
   return plastPoints && skloPoints && rouskaPoints
}

function checkDone() {
   if( isDone() ) {
      window.location = "dalsi_hra.htm"
   }
}


Mimochodem nevidim tam vubec nic o nahode, tak nevim proc jsi to pojmenovaval "nahoda".

Pokud je to kviz pravdepodobne bys mel chtit udelat jednu funkci ktera dokaze zkontrolovat kazdou otazku namisto psani porad dokola tu samou funkci s jinym nazvem a vytvareni novych promennych - tyhle veci by se mely delat za tebe.
Normalne by sis mel pripravit data na quiz a pomoci nich generovat kviz a pak pomoci jedny funkce kontrolovat jestli kliknul na dobrou nebo spatnou otazku a podle toho neco delat. Nejlepe se s temahle vecma pracuje v nejakym
frameworku jako react nebo vue ale da se to delat i ve vanila JS ale kazdopadne potrebujes silny zaklady JS :/ coz asi zatim nemas ale kdyby ses na ne chtel podivat tak hodne dobry zdroj informaci je stranka
javascript.info

// nejprve si ulozim odkazy na elementy
const quiz = {
   quiestions: [
      {
         question: 'bla bla bla',
         hasTrueAnswers: 3,
         answers: {
            plast: {
               answer: 'je to plast?',
               isTrue: true
            },
            sklo: {
               answer: 'je to sklo?',
               isTrue: true
            },
            rouska: {
               answer: 'je to rouska?',
               isTrue: true
            },
            markwart: {
               answer: 'je to markwart?',
               isTrue: false
            },
         }
      }
   ]
}

// nachazis se pravdepodobne v react/vue komponente na miste kde se to generuje takze
// mas kontext tehle otazky v promenne "question"
function checkAnswer(name) {
   // tady zkontrolujes jestli kliknul na spravnou a podle toho nactes body
   // chtel jsem to i ukazat ale nakonec nemuzu protoze nevim jak se to ma
   // chovat, netusim co chces delat kdyz klikne na spatnou atd.
}

Vaše odpověď

Mohlo by se hodit

Neumíte-li správně určit příčinu chyby, vkládejte odkazy na živé ukázky.
Užíváte-li nějakou cizí knihovnu, ukažte odpovídajícím, kde jste ji vzali.

Užitečné odkazy:

Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm:

0